# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
74295 |
2018-08-31T01:22:06 Z |
funcsr |
Teams (IOI15_teams) |
C++17 |
|
1804 ms |
459648 KB |
#include "teams.h"
#include <iostream>
#include <vector>
#include <set>
#include <queue>
#include <algorithm>
#include <cassert>
using namespace std;
#define MAX_N (1<<19)
#define rep(i, n) for (int i=0; i<(n); i++)
#define pb push_back
struct SegTree {
SegTree *left = NULL, *right = NULL;
int available;
SegTree(int a) : available(a) {}
SegTree *add(int p, int l=0, int r=MAX_N) {
if (r-l == 1) {
return new SegTree(available+1);
}
int mid = (l+r)/2;
SegTree *new_left = left, *new_right = right;
if (p < mid) {
if (!left) left = new SegTree(0);
new_left = left->add(p, l, mid);
}
else {
if (!right) right = new SegTree(0);
new_right = right->add(p, mid, r);
}
SegTree *ret = new SegTree(available+1);
ret->left = new_left;
ret->right = new_right;
return ret;
}
};
int used[MAX_N*2-1];
SegTree *last[MAX_N*2-1];
void setLazy(int k, SegTree *v) {
last[k] = v;
if (last[k] != NULL) used[k] = last[k]->available;
}
void push(int k) {
if (last[k] == NULL) return;
setLazy(k*2+1, last[k]->left);
setLazy(k*2+2, last[k]->right);
last[k] = NULL;
}
int N;
SegTree *seg[500001];
int take(SegTree *x, int a, int b, int num, int k=0, int l=0, int r=MAX_N) {
if (x == NULL) return num;
if (num == 0) return 0;
if (b <= l || r <= a) return num;
if (a <= l && r <= b) {
int rest = x->available-used[k];
if (rest == 0) return num;
if (num >= rest) {
setLazy(k, x);
assert(used[k] == x->available);
return num - rest;
}
else {
if (r-l==1) {
int e = min(rest, num);
used[k] += e;
return num-e;
}
// continue
}
}
push(k);
num = take(x->left, a, b, num, k*2+1, l, (l+r)/2);
num = take(x->right, a, b, num, k*2+2, (l+r)/2, r);
used[k] = used[k*2+1]+used[k*2+2];
return num;
}
void cleanup(int k=0, int l=0, int r=MAX_N) {
if (used[k] == 0) return;
used[k] = 0;
last[k] = NULL;
if (r-l == 1) return;
last[k*2+1] = last[k*2+2] = NULL;
cleanup(k*2+1, l, (l+r)/2);
cleanup(k*2+2, (l+r)/2, r);
}
vector<int> G[500001];
void init(int NN, int A[], int B[]) {
N=NN;
rep(i, N) G[A[i]].pb(B[i]);
SegTree *head = new SegTree(0);
rep(l, N+1) {
for (int r : G[l]) head = head->add(r);
seg[l] = head;
}
}
int can(int M, int K[]) {
long long sum = 0;
rep(i, M) sum += K[i];
if (sum > N) return 0;
//rep(i, MAX_N*2-1) used[i] = 0, last[i] = NULL;
cleanup();
sort(K, K+M);
rep(i, M) if (take(seg[K[i]], K[i], MAX_N, K[i]) > 0) return 0;
return 1;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
12152 KB |
Output is correct |
2 |
Correct |
11 ms |
12156 KB |
Output is correct |
3 |
Correct |
11 ms |
12216 KB |
Output is correct |
4 |
Correct |
12 ms |
12372 KB |
Output is correct |
5 |
Correct |
11 ms |
12372 KB |
Output is correct |
6 |
Correct |
11 ms |
12372 KB |
Output is correct |
7 |
Correct |
12 ms |
12372 KB |
Output is correct |
8 |
Correct |
14 ms |
12420 KB |
Output is correct |
9 |
Correct |
12 ms |
12420 KB |
Output is correct |
10 |
Correct |
12 ms |
12564 KB |
Output is correct |
11 |
Correct |
11 ms |
12564 KB |
Output is correct |
12 |
Correct |
13 ms |
12564 KB |
Output is correct |
13 |
Correct |
16 ms |
12564 KB |
Output is correct |
14 |
Correct |
12 ms |
12564 KB |
Output is correct |
15 |
Correct |
12 ms |
12564 KB |
Output is correct |
16 |
Correct |
13 ms |
12564 KB |
Output is correct |
17 |
Correct |
12 ms |
12564 KB |
Output is correct |
18 |
Correct |
12 ms |
12564 KB |
Output is correct |
19 |
Correct |
12 ms |
12564 KB |
Output is correct |
20 |
Correct |
12 ms |
12564 KB |
Output is correct |
21 |
Correct |
12 ms |
12564 KB |
Output is correct |
22 |
Correct |
12 ms |
12564 KB |
Output is correct |
23 |
Correct |
12 ms |
12564 KB |
Output is correct |
24 |
Correct |
12 ms |
12564 KB |
Output is correct |
25 |
Correct |
12 ms |
12564 KB |
Output is correct |
26 |
Correct |
13 ms |
12564 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
185 ms |
82824 KB |
Output is correct |
2 |
Correct |
194 ms |
82824 KB |
Output is correct |
3 |
Correct |
184 ms |
82824 KB |
Output is correct |
4 |
Correct |
186 ms |
83068 KB |
Output is correct |
5 |
Correct |
126 ms |
83068 KB |
Output is correct |
6 |
Correct |
122 ms |
83068 KB |
Output is correct |
7 |
Correct |
122 ms |
83068 KB |
Output is correct |
8 |
Correct |
120 ms |
83068 KB |
Output is correct |
9 |
Correct |
136 ms |
83068 KB |
Output is correct |
10 |
Correct |
127 ms |
83068 KB |
Output is correct |
11 |
Correct |
122 ms |
83068 KB |
Output is correct |
12 |
Correct |
120 ms |
83068 KB |
Output is correct |
13 |
Correct |
134 ms |
83068 KB |
Output is correct |
14 |
Correct |
144 ms |
83692 KB |
Output is correct |
15 |
Correct |
173 ms |
87300 KB |
Output is correct |
16 |
Correct |
176 ms |
88232 KB |
Output is correct |
17 |
Correct |
133 ms |
88232 KB |
Output is correct |
18 |
Correct |
123 ms |
88232 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
181 ms |
91324 KB |
Output is correct |
2 |
Correct |
191 ms |
91456 KB |
Output is correct |
3 |
Correct |
431 ms |
97156 KB |
Output is correct |
4 |
Correct |
194 ms |
97156 KB |
Output is correct |
5 |
Correct |
166 ms |
97156 KB |
Output is correct |
6 |
Correct |
159 ms |
97156 KB |
Output is correct |
7 |
Correct |
127 ms |
97156 KB |
Output is correct |
8 |
Correct |
155 ms |
97156 KB |
Output is correct |
9 |
Correct |
135 ms |
97156 KB |
Output is correct |
10 |
Correct |
150 ms |
97156 KB |
Output is correct |
11 |
Correct |
157 ms |
97156 KB |
Output is correct |
12 |
Correct |
184 ms |
97156 KB |
Output is correct |
13 |
Correct |
293 ms |
98100 KB |
Output is correct |
14 |
Correct |
451 ms |
107440 KB |
Output is correct |
15 |
Correct |
212 ms |
107440 KB |
Output is correct |
16 |
Correct |
220 ms |
107440 KB |
Output is correct |
17 |
Correct |
156 ms |
107440 KB |
Output is correct |
18 |
Correct |
164 ms |
107440 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1076 ms |
392504 KB |
Output is correct |
2 |
Correct |
1070 ms |
392504 KB |
Output is correct |
3 |
Correct |
1672 ms |
411640 KB |
Output is correct |
4 |
Correct |
1048 ms |
411640 KB |
Output is correct |
5 |
Correct |
636 ms |
411640 KB |
Output is correct |
6 |
Correct |
631 ms |
411640 KB |
Output is correct |
7 |
Correct |
561 ms |
411640 KB |
Output is correct |
8 |
Correct |
619 ms |
411640 KB |
Output is correct |
9 |
Correct |
653 ms |
411640 KB |
Output is correct |
10 |
Correct |
603 ms |
411640 KB |
Output is correct |
11 |
Correct |
653 ms |
411640 KB |
Output is correct |
12 |
Correct |
726 ms |
411640 KB |
Output is correct |
13 |
Correct |
1081 ms |
418064 KB |
Output is correct |
14 |
Correct |
1804 ms |
459648 KB |
Output is correct |
15 |
Correct |
979 ms |
459648 KB |
Output is correct |
16 |
Correct |
941 ms |
459648 KB |
Output is correct |
17 |
Correct |
642 ms |
459648 KB |
Output is correct |
18 |
Correct |
640 ms |
459648 KB |
Output is correct |