Problem p00277 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <algorithm>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define rep(i, n) for (int i = 0; i < n; ++i)
#define rrep(i, n) for (int i = 1; i <= n; ++i)
using namespace std;
typedef pair<int, int> P;
const int INF = 1000000000;

int main() {
  /*
  int N,R,L;
  int n,t,s;
  int nowN=-1,befT=0,maxS;
  static int scr[114514],time[114514];
  scanf("%d%d%d",&N,&R,&L);
  rep(i,R){
          maxS=-INF;
          scanf("%d%d%d",&n,&t,&s);
          if(nowN>-1)time[nowN]+=t-befT;
          scr[n-1]+=s;
          rep(i,N)maxS=max(scr[i],maxS);
          rep(i,N)if(scr[i]==maxS){nowN=i;break;}
          befT=t;
  }
          maxS=-INF;
          t=L;
          time[nowN]+=t-befT;
          rep(i,N)maxS=max(time[i],maxS);
          rep(i,N)if(time[i]==maxS){nowN=i;break;}
          printf("%d\n",nowN+1);
  return 0;*/

  int N, R, L;
  int n, t, s;
  int nowN = -1, befT = 0, maxS;
  static int scr[114514], time[114514];
  scanf("%d%d%d", &N, &R, &L);
  rep(i, R) {
    maxS = -INF;
    scanf("%d%d%d", &n, &t, &s);
    if (nowN > -1)
      time[nowN] += t - befT;
    scr[n - 1] += s;
    if (nowN == -1) {
      if (scr[n - 1] > 0)
        nowN = n - 1;
      else if (n == 0)
        nowN = 1;
      else
        nowN = 0;
      // else nowN =
      // (scr[n-1]==scr[nowN]?min(n-1,nowN):(scr[n-1]>scr[nowN]?n-1:nowN));
    } else if (n - 1 != nowN) {
      if (scr[n - 1] >= scr[nowN]) {
        if (scr[n - 1] == scr[nowN])
          nowN = min(n - 1, nowN);
        else
          nowN = n - 1;
      }
    } else if (n - 1 == nowN) {
      nowN = 0;
      rep(i, N) if (scr[i] > scr[nowN]) nowN = i;
      // rep(i,N)if(scr[i]==maxS){nowN=i;break;}
    }
    befT = t;
  }
  maxS = -INF;
  t = L;
  time[nowN] += t - befT;
  rep(i, N) maxS = max(time[i], maxS);
  rep(i, N) if (time[i] == maxS) {
    nowN = i;
    break;
  }
  printf("%d\n", nowN + 1);
  return 0;
}

Fixed submission:
#include <algorithm>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define rep(i, n) for (int i = 0; i < n; ++i)
#define rrep(i, n) for (int i = 1; i <= n; ++i)
using namespace std;
typedef pair<int, int> P;
const int INF = 1000000000;

int main() {
  /*
  int N,R,L;
  int n,t,s;
  int nowN=-1,befT=0,maxS;
  static int scr[114514],time[114514];
  scanf("%d%d%d",&N,&R,&L);
  rep(i,R){
          maxS=-INF;
          scanf("%d%d%d",&n,&t,&s);
          if(nowN>-1)time[nowN]+=t-befT;
          scr[n-1]+=s;
          rep(i,N)maxS=max(scr[i],maxS);
          rep(i,N)if(scr[i]==maxS){nowN=i;break;}
          befT=t;
  }
          maxS=-INF;
          t=L;
          time[nowN]+=t-befT;
          rep(i,N)maxS=max(time[i],maxS);
          rep(i,N)if(time[i]==maxS){nowN=i;break;}
          printf("%d\n",nowN+1);
  return 0;*/

  int N, R, L;
  int n, t, s;
  int nowN = -1, befT = 0, maxS;
  static int scr[114514], time[114514];
  scanf("%d%d%d", &N, &R, &L);
  rep(i, R) {
    maxS = -INF;
    scanf("%d%d%d", &n, &t, &s);
    if (nowN > -1)
      time[nowN] += t - befT;
    scr[n - 1] += s;
    if (nowN == -1) {
      if (scr[n - 1] > 0)
        nowN = n - 1;
      else if (n == 0)
        nowN = 1;
      else
        nowN = 0;
      // else nowN =
      // (scr[n-1]==scr[nowN]?min(n-1,nowN):(scr[n-1]>scr[nowN]?n-1:nowN));
    } else if (n - 1 != nowN) {
      if (scr[n - 1] >= scr[nowN]) {
        if (scr[n - 1] == scr[nowN])
          nowN = min(n - 1, nowN);
        else
          nowN = n - 1;
      }
    } else if (n - 1 == nowN) {
      if (s < 0) {
        nowN = 0;
        rep(i, N) if (scr[i] > scr[nowN]) nowN = i;
      } else {
      }
      // rep(i,N)if(scr[i]==maxS){nowN=i;break;}
    }
    befT = t;
  }
  maxS = -INF;
  t = L;
  time[nowN] += t - befT;
  rep(i, N) maxS = max(time[i], maxS);
  rep(i, N) if (time[i] == maxS) {
    nowN = i;
    break;
  }
  printf("%d\n", nowN + 1);
  return 0;
}