# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
28166 |
2017-07-15T13:59:48 Z |
zoomswk |
Teams (IOI15_teams) |
C++14 |
|
2423 ms |
333616 KB |
#include "teams.h"
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1000005;
int T[MAX_N*25], L[MAX_N*25], R[MAX_N*25];
int root[MAX_N];
int nodecnt=2;
int N;
void build(int node, int l, int r){
if(l == r) return;
L[node] = nodecnt++;
R[node] = nodecnt++;
int mid = (l+r)>>1;
build(L[node], l, mid);
build(R[node], mid+1, r);
return;
}
void upd(int prev, int node, int l, int r, int pos){
if(l == r){
T[node] = T[prev]+1;
return;
}
int mid = (l+r)>>1;
L[node] = L[prev], R[node] = R[prev];
if(pos <= mid){
L[node] = nodecnt++;
upd(L[prev], L[node], l, mid, pos);
} else{
R[node] = nodecnt++;
upd(R[prev], R[node], mid+1, r, pos);
}
T[node] = T[L[node]] + T[R[node]];
return;
}
int qr(int node, int node2, int until, int cur_l, int cur_r){
if(cur_r <= until) return T[node]-T[node2];
if(cur_l > until) return 0;
int mid = (cur_l+cur_r)>>1;
return qr(L[node], L[node2], until, cur_l, mid) + qr(R[node], R[node2], until, mid+1, cur_r);
}
vector<int> r[500005];
int st_cnt[500005], en_cnt[500005];
void init(int n, int A[], int B[]){
N = n;
for(int i=0; i<N; i++) r[B[i]].push_back(A[i]), st_cnt[A[i]]++, en_cnt[B[i]]++;
for(int i=1; i<=N; i++) st_cnt[i] += st_cnt[i-1], en_cnt[i] += en_cnt[i-1];
root[0] = 1;
build(1, 1, N);
for(int i=1; i<=N; i++){
root[i] = root[i-1];
if(r[i].size()){
int prev = root[i-1];
root[i] = nodecnt++;
upd(prev, root[i], 1, N, r[i][0]);
for(int j=1; j<r[i].size(); j++){
int prev = root[i];
root[i] = nodecnt++;
upd(prev, root[i], 1, N, r[i][j]);
}
}
}
return;
}
int can(int M, int K[]){
long long sum = 0;
for(int i=0; i<M; i++) sum += K[i];
if(sum > N) return 0;
sort(K, K+M);
int A[M], CNT[M];
int ptr = 0;
for(int i=0; i<M; i++) A[i] = 0, CNT[i] = 0;
for(int i=0; i<M; i++){
if(i == 0 || K[i] != K[i-1]){
A[ptr] = K[i];
CNT[ptr++] = K[i];
} else{
CNT[ptr-1] += K[i];
}
}
int cnt = 0;
for(int i=0; i<ptr; i++){
int prev = 0;
if(i) prev = A[i-1];
// remove done students
cnt -= en_cnt[A[i]-1] - (prev > 0 ? en_cnt[prev-1] : 0);
int done = 0;
for(int j=0; j<i; j++){
if(!CNT[j]) continue;
int ok = qr(root[A[i]-1], root[prev-1], A[j], 1, N);
ok = min(ok-done, CNT[j]);
CNT[j] -= ok;
cnt += ok;
done += ok;
}
// add new students
cnt += st_cnt[A[i]] - st_cnt[prev];
if(cnt < CNT[i]) return 0;
cnt -= CNT[i];
}
return 1;
}
Compilation message
teams.cpp: In function 'void init(int, int*, int*)':
teams.cpp:62:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int j=1; j<r[i].size(); j++){
^
teams.cpp:63:21: warning: declaration of 'prev' shadows a previous local [-Wshadow]
int prev = root[i];
^
teams.cpp:59:17: note: shadowed declaration is here
int prev = root[i-1];
^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
314524 KB |
Output is correct |
2 |
Correct |
6 ms |
314524 KB |
Output is correct |
3 |
Correct |
0 ms |
314524 KB |
Output is correct |
4 |
Correct |
3 ms |
314524 KB |
Output is correct |
5 |
Correct |
0 ms |
314524 KB |
Output is correct |
6 |
Correct |
0 ms |
314524 KB |
Output is correct |
7 |
Correct |
3 ms |
314524 KB |
Output is correct |
8 |
Correct |
0 ms |
314524 KB |
Output is correct |
9 |
Correct |
3 ms |
314524 KB |
Output is correct |
10 |
Correct |
3 ms |
314524 KB |
Output is correct |
11 |
Correct |
3 ms |
314524 KB |
Output is correct |
12 |
Correct |
3 ms |
314524 KB |
Output is correct |
13 |
Correct |
6 ms |
314524 KB |
Output is correct |
14 |
Correct |
6 ms |
314524 KB |
Output is correct |
15 |
Correct |
0 ms |
314524 KB |
Output is correct |
16 |
Correct |
0 ms |
314524 KB |
Output is correct |
17 |
Correct |
0 ms |
314524 KB |
Output is correct |
18 |
Correct |
3 ms |
314524 KB |
Output is correct |
19 |
Correct |
3 ms |
314524 KB |
Output is correct |
20 |
Correct |
0 ms |
314524 KB |
Output is correct |
21 |
Correct |
3 ms |
314524 KB |
Output is correct |
22 |
Correct |
0 ms |
314524 KB |
Output is correct |
23 |
Correct |
0 ms |
314524 KB |
Output is correct |
24 |
Correct |
0 ms |
314524 KB |
Output is correct |
25 |
Correct |
0 ms |
314524 KB |
Output is correct |
26 |
Correct |
0 ms |
314524 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
73 ms |
317156 KB |
Output is correct |
2 |
Correct |
86 ms |
317156 KB |
Output is correct |
3 |
Correct |
79 ms |
317156 KB |
Output is correct |
4 |
Correct |
86 ms |
318204 KB |
Output is correct |
5 |
Correct |
26 ms |
315968 KB |
Output is correct |
6 |
Correct |
29 ms |
315968 KB |
Output is correct |
7 |
Correct |
19 ms |
315968 KB |
Output is correct |
8 |
Correct |
19 ms |
315968 KB |
Output is correct |
9 |
Correct |
29 ms |
316168 KB |
Output is correct |
10 |
Correct |
23 ms |
316160 KB |
Output is correct |
11 |
Correct |
29 ms |
316160 KB |
Output is correct |
12 |
Correct |
23 ms |
316160 KB |
Output is correct |
13 |
Correct |
29 ms |
316228 KB |
Output is correct |
14 |
Correct |
59 ms |
316916 KB |
Output is correct |
15 |
Correct |
73 ms |
317024 KB |
Output is correct |
16 |
Correct |
69 ms |
317024 KB |
Output is correct |
17 |
Correct |
26 ms |
315884 KB |
Output is correct |
18 |
Correct |
23 ms |
315856 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
93 ms |
317552 KB |
Output is correct |
2 |
Correct |
96 ms |
317552 KB |
Output is correct |
3 |
Correct |
109 ms |
320192 KB |
Output is correct |
4 |
Correct |
79 ms |
318200 KB |
Output is correct |
5 |
Correct |
69 ms |
316364 KB |
Output is correct |
6 |
Correct |
56 ms |
316364 KB |
Output is correct |
7 |
Correct |
23 ms |
316364 KB |
Output is correct |
8 |
Correct |
39 ms |
316364 KB |
Output is correct |
9 |
Correct |
26 ms |
316168 KB |
Output is correct |
10 |
Correct |
23 ms |
316204 KB |
Output is correct |
11 |
Correct |
43 ms |
316168 KB |
Output is correct |
12 |
Correct |
773 ms |
316296 KB |
Output is correct |
13 |
Correct |
189 ms |
316496 KB |
Output is correct |
14 |
Correct |
139 ms |
318748 KB |
Output is correct |
15 |
Correct |
83 ms |
317420 KB |
Output is correct |
16 |
Correct |
69 ms |
317420 KB |
Output is correct |
17 |
Correct |
46 ms |
316304 KB |
Output is correct |
18 |
Correct |
43 ms |
316292 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
623 ms |
328204 KB |
Output is correct |
2 |
Correct |
653 ms |
328204 KB |
Output is correct |
3 |
Correct |
709 ms |
333616 KB |
Output is correct |
4 |
Correct |
663 ms |
329632 KB |
Output is correct |
5 |
Correct |
259 ms |
322000 KB |
Output is correct |
6 |
Correct |
199 ms |
322000 KB |
Output is correct |
7 |
Correct |
103 ms |
322132 KB |
Output is correct |
8 |
Correct |
193 ms |
322000 KB |
Output is correct |
9 |
Correct |
73 ms |
322392 KB |
Output is correct |
10 |
Correct |
116 ms |
321592 KB |
Output is correct |
11 |
Correct |
1686 ms |
321592 KB |
Output is correct |
12 |
Correct |
2423 ms |
321592 KB |
Output is correct |
13 |
Correct |
959 ms |
322480 KB |
Output is correct |
14 |
Correct |
866 ms |
329784 KB |
Output is correct |
15 |
Correct |
603 ms |
326896 KB |
Output is correct |
16 |
Correct |
543 ms |
326948 KB |
Output is correct |
17 |
Correct |
169 ms |
322716 KB |
Output is correct |
18 |
Correct |
159 ms |
322424 KB |
Output is correct |