提出 #311954


ソースコード 拡げる

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <numeric>
#define FOR(x, to) for (int x = 0; x < to; x++)

using namespace std;

typedef long long ll;
typedef pair<int, int> P;
typedef pair<P, int> PP;

int N;
PP p[100005];

int dp[1000005];
vector< set<P> >  S(1000005);
int ans_idx;

bool is_update(set<P> &a, set<P> &b) {
	set<P>::iterator itr = a.begin();
	set<P>::iterator itr2= b.begin();
	while (itr != a.end()) {
		if ((*itr).first < (*itr2).first) {
			return true;
		} else if ((*itr).first == (*itr2).first) {
			if ((*itr).second < (*itr2).second) return true;
		}
		itr++;
		itr2++;
	}
	return false;
}

void debug(set<P> s) {
	set<P>::iterator itr = s.begin();
	while (itr != s.end()) {
		cout << (*itr).first << "  " << (*itr).second << endl;
		itr++;
	}
}

int main() {
	cin >> N;
	FOR(i, N) {
		int a, b;
		cin >> a >> b;
		p[i].first.first = b;
		p[i].first.second = a;
		p[i].second = i + 1;
		ans_idx = max(ans_idx, b);
	}
	sort(p, p + N);
	int j = 1;
	for (int i = 0; i < N; i++) {
		int tail = p[i].first.first;
		int head = p[i].first.second;
		int idx =  p[i].second;
		//cout << "tail " << tail << endl;
		while (j <= tail) {
			dp[j] = dp[j - 1];
			S[j] = S[j - 1];
			j++;
		}
		if (dp[tail] <  dp[head] + 1) {
			dp[tail] = dp[head] + 1;
			S[tail] = S[head];
			S[tail].insert(P(head, idx));
		} else if (dp[tail] == dp[head] + 1) {
			//cout << i << "daada" << endl;
			set<P> tmp(S[head]);
			tmp.insert(P(head, idx));
			if (is_update(tmp, S[tail])) {
				S[tail] = tmp;
			}
		}
		//cout << "aaa" << i << endl;
		//for (int i = 0; i <= ans_idx; i++) {
		//	cout << i << " ";
		//}
		//cout << endl;
		//for (int i = 0; i <= ans_idx; i++) {
		//	cout << dp[i] << " ";
		//}
		//cout << endl;
	}
	//for (int i = 0; i <= ans_idx; i++) {
	//	cout << "-----" << i << endl;
	//	debug(S[i]);
	//}
	cout << dp[ans_idx] << endl;
	set<P>::iterator itr = S[ans_idx].begin();
	vector<int> ans;
	while (itr != S[ans_idx].end()) {
		ans.push_back((*itr).second);
		itr++;
	}
	for (int i = 0; i < ans.size(); i++) {
		printf("%d%c", ans[i], i == ans.size() - 1 ? '\n' : ' ');
	}
	return 0;
}


提出情報

提出日時
問題 C - 仕事計画
ユーザ apple_juice
言語 C++ (G++ 4.6.4)
得点 0
コード長 2401 Byte
結果 WA
実行時間 2159 ms
メモリ 785012 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 0 / 100
結果
AC × 3
AC × 11
WA × 8
TLE × 4
MLE × 1
セット名 テストケース
Sample sample1.txt, sample2.txt, sample3.txt
All 0.txt, 1.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 2.txt, 20.txt, 21.txt, 22.txt, 23.txt, 3.txt, 4.txt, 5.txt, 6.txt, 7.txt, 8.txt, 9.txt
ケース名 結果 実行時間 メモリ
0.txt AC 123 ms 48868 KiB
1.txt AC 124 ms 48868 KiB
10.txt WA 124 ms 49012 KiB
11.txt MLE 951 ms 304236 KiB
12.txt AC 128 ms 48872 KiB
13.txt WA 129 ms 49640 KiB
14.txt TLE 2159 ms 785012 KiB
15.txt AC 152 ms 49076 KiB
16.txt WA 169 ms 54712 KiB
17.txt TLE 2147 ms 748028 KiB
18.txt AC 241 ms 49204 KiB
19.txt WA 282 ms 57528 KiB
2.txt AC 155 ms 51700 KiB
20.txt TLE 2151 ms 716156 KiB
21.txt AC 245 ms 49088 KiB
22.txt AC 1131 ms 72500 KiB
23.txt TLE 2134 ms 681704 KiB
3.txt AC 142 ms 49212 KiB
4.txt AC 140 ms 49072 KiB
5.txt AC 164 ms 51784 KiB
6.txt WA 147 ms 49072 KiB
7.txt WA 140 ms 49148 KiB
8.txt WA 279 ms 87932 KiB
9.txt WA 141 ms 49020 KiB
sample1.txt AC 145 ms 49016 KiB
sample2.txt AC 136 ms 49080 KiB
sample3.txt AC 140 ms 49076 KiB