提出 #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 | ||||||||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |