Problem p02948 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <algorithm>
#include <cmath>
#include <iostream>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>

const long long MOD = 1000000007;
using namespace std;
typedef long long llong;

// int isalpha(char ch): ch がアルファベットなら true を返す
// int isdigit(char ch): ch が数字なら true を返す
// int islower(char ch): ch が小文字なら true を返す
// int isupper(char ch): ch が大文字なら true を返す
// int tolower(char ch): ch の小文字を返す
// int toupper(char ch): ch の大文字を返す

// string型
// size()	文字数を返す
// Insert()	（指定した場所に）文字・文字列を挿入する
// erase()	（指定した場所の）文字・文字列を削除する
// clear()	すべての文字を削除する
// substr()	文字列の（指定した）部分文字列を返す
// replace()	（指定した）部分文字列を新しい文字列に置換する
// c_str()変換
// 文字列の比較は、<=や==などを使え
// replace関数を使い、簡単に文字列を置換
// リバース関数：reverse(str.begin(), str.end());
// map<type, type> dict;で宣言
// グラフ理論用変数
// vector<vector<llong> > graph(N);

// ソート
// 降順sort(v.begin(), v.end(), std::greater<Type>());

// 大文字から小文字へんかん
// w[i] = w[i]-'A'+'a';

// vector
// assignメソッド　引数：サイズ、値
// 与えられたサイズと値でvectorを初期化する

// queueクラス
// find()次に取り出す値の表示をする。
// pop()値を取り出す。戻り値はなし
// push()キューに値をプッシュする

// priority_queueクラス

// 切り上げ
// ceil
// floor

int main() {
  llong N, M;
  cin >> N >> M;
  priority_queue<llong> PQ;
  vector<vector<llong>> Table(M + 1);
  pair<llong, llong> x;
  llong min_day = MOD;
  for (int i = 0; i < N; i++) {
    cin >> x.first >> x.second;
    if (x.first > M) {
      continue;
    }
    Table[x.first].push_back(x.second);
    min_day = min(x.first, min_day);
  }
  llong total = 0;
  llong now_day = min_day;

  while (now_day <= M) {
    for (int j = 0; j < Table[now_day].size(); j++) {
      PQ.push(Table[now_day][j]);
    }
    if (PQ.empty()) {
      now_day++;
      continue;
    }
    total = total + PQ.top();
    PQ.pop();
  }
  cout << total << endl;
  return 0;
}


Fixed submission:
#include <algorithm>
#include <cmath>
#include <iostream>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>

const long long MOD = 1000000007;
using namespace std;
typedef long long llong;

// int isalpha(char ch): ch がアルファベットなら true を返す
// int isdigit(char ch): ch が数字なら true を返す
// int islower(char ch): ch が小文字なら true を返す
// int isupper(char ch): ch が大文字なら true を返す
// int tolower(char ch): ch の小文字を返す
// int toupper(char ch): ch の大文字を返す

// string型
// size()	文字数を返す
// Insert()	（指定した場所に）文字・文字列を挿入する
// erase()	（指定した場所の）文字・文字列を削除する
// clear()	すべての文字を削除する
// substr()	文字列の（指定した）部分文字列を返す
// replace()	（指定した）部分文字列を新しい文字列に置換する
// c_str()変換
// 文字列の比較は、<=や==などを使え
// replace関数を使い、簡単に文字列を置換
// リバース関数：reverse(str.begin(), str.end());
// map<type, type> dict;で宣言
// グラフ理論用変数
// vector<vector<llong> > graph(N);

// ソート
// 降順sort(v.begin(), v.end(), std::greater<Type>());

// 大文字から小文字へんかん
// w[i] = w[i]-'A'+'a';

// vector
// assignメソッド　引数：サイズ、値
// 与えられたサイズと値でvectorを初期化する

// queueクラス
// find()次に取り出す値の表示をする。
// pop()値を取り出す。戻り値はなし
// push()キューに値をプッシュする

// priority_queueクラス

// 切り上げ
// ceil
// floor

int main() {
  llong N, M;
  cin >> N >> M;
  priority_queue<llong> PQ;
  vector<vector<llong>> Table(M + 1);
  pair<llong, llong> x;
  llong min_day = MOD;
  for (int i = 0; i < N; i++) {
    cin >> x.first >> x.second;
    if (x.first > M) {
      continue;
    }
    Table[x.first].push_back(x.second);
    min_day = min(x.first, min_day);
  }
  llong total = 0;
  llong now_day = min_day;

  while (now_day <= M) {
    for (int j = 0; j < Table[now_day].size(); j++) {
      PQ.push(Table[now_day][j]);
    }
    if (PQ.empty()) {
      now_day++;
      continue;
    }
    total = total + PQ.top();
    PQ.pop();
    now_day++;
  }
  cout << total << endl;
  return 0;
}