Problem p01270 (C++)

Buggy submission (status: Time Limit Exceeded):
/*
 */
#include <algorithm>
#include <iostream>
#include <list>

using namespace std;

typedef pair<int, int> P;

// init

// input
int iN;
char cC; // 0 <= N <= 100,000
int iI;  // 1 <= P <= 100
int iS;  // 1 <= P <= 100
int iP;  // 1 <= P <= 100

// manage

// ú»
void init() {}

// üÍ
bool input() {
  scanf("%d", &iN);
  if (iN == 0)
    return false;
  return true;
}

// 
void manage() {
  int i;
  list<P> lis;
  list<P>::iterator it; // Ce[^
  P p;
  for (i = 0; i < iN; i++) {
    it = lis.begin();

    while (it != lis.end()) {                     // listÌöÜÅ
      printf("(%d, %d) ", it->first, it->second); // vfðoÍ
      ++it; // Ce[^ðPÂißé
    }
    printf("\n"); // vfðoÍ

    scanf(" %c", &cC);

    if (cC == 'W') {
      scanf("%d %d", &iI, &iS);
      it = lis.begin();
      while (it != lis.end()) { // listÌöÜÅ
        if (it->first == -1) {
          it->first = iI;
          if (iS >= it->second) {
            iS -= it->second;
          } else {
            int d = it->second - iS;
            it->second = iS;
            iS = 0;
            it++;
            lis.insert(it, P(-1, d));
          }
          if (iS == 0)
            break;
        }
        it++;
      }
      if (it == lis.end()) {
        lis.push_back(P(iI, iS));
      }
      continue;
    }

    if (cC == 'D') {
      scanf("%d", &iI);
      it = lis.begin();
      while (it != lis.end()) { // listÌöÜÅ
        if (it->first == iI) {
          it->first = -1;
        }
        it++;
      }

      continue;
    }

    if (cC == 'R') {
      scanf("%d", &iP);
      it = lis.begin();
      int sum = 0;
      while (it != lis.end()) { // listÌöÜÅ
        // printf("(%d, %d) %d %d %d\n", it->first, it->second, sum +
        // it->second, iP, sum + it->second > iP); // vfðoÍ
        if (sum + it->second > iP)
          break;
        sum += it->second;
        it++;
      }
      if (it != lis.end()) {
        printf("%d\n", it->first);
      } else {
        printf("-1\n");
      }
      continue;
    }
  }
}

// oÍ
void output() { printf("\n"); }

// mizoSâ¤Ê
int main() {
  init(); // ú»
  while (1) {
    if (!input())
      break;  // üÍ + I¹»è
    manage(); // 
    output(); // oÍ
  }
  return 0;
}

Fixed submission:
/*
 */
#include <algorithm>
#include <iostream>
#include <list>

using namespace std;

typedef pair<int, int> P;

// init

// input
int iN;
char cC; // 0 <= N <= 100,000
int iI;  // 1 <= P <= 100
int iS;  // 1 <= P <= 100
int iP;  // 1 <= P <= 100

// manage

// ú»
void init() {}

// üÍ
bool input() {
  scanf("%d", &iN);
  if (iN == 0)
    return false;
  return true;
}

// 
void manage() {
  int i;
  list<P> lis;
  list<P>::iterator it; // Ce[^
  P p;
  for (i = 0; i < iN; i++) {
    it = lis.begin();
    /*
        while (it != lis.end()) { // listÌöÜÅ
          printf("(%d, %d) ", it->first, it->second); // vfðoÍ
          ++it; // Ce[^ðPÂißé
        }
        printf("\n"); // vfðoÍ
    */
    scanf(" %c", &cC);

    if (cC == 'W') {
      scanf("%d %d", &iI, &iS);
      it = lis.begin();
      while (it != lis.end()) { // listÌöÜÅ
        if (it->first == -1) {
          it->first = iI;
          if (iS >= it->second) {
            iS -= it->second;
          } else {
            int d = it->second - iS;
            it->second = iS;
            iS = 0;
            it++;
            lis.insert(it, P(-1, d));
          }
          if (iS == 0)
            break;
        }
        it++;
      }
      if (it == lis.end()) {
        lis.push_back(P(iI, iS));
      }
      continue;
    }

    if (cC == 'D') {
      scanf("%d", &iI);
      it = lis.begin();
      while (it != lis.end()) { // listÌöÜÅ
        if (it->first == iI) {
          it->first = -1;
        }
        it++;
      }

      continue;
    }

    if (cC == 'R') {
      scanf("%d", &iP);
      it = lis.begin();
      int sum = 0;
      while (it != lis.end()) { // listÌöÜÅ
        // printf("(%d, %d) %d %d %d\n", it->first, it->second, sum +
        // it->second, iP, sum + it->second > iP); // vfðoÍ
        if (sum + it->second > iP)
          break;
        sum += it->second;
        it++;
      }
      if (it != lis.end()) {
        printf("%d\n", it->first);
      } else {
        printf("-1\n");
      }
      continue;
    }
  }
}

// oÍ
void output() { printf("\n"); }

// mizoSâ¤Ê
int main() {
  init(); // ú»
  while (1) {
    if (!input())
      break;  // üÍ + I¹»è
    manage(); // 
    output(); // oÍ
  }
  return 0;
}