#include "teams.h"
#include<bits/stdc++.h>
using namespace std;
#define DEBUG false
#define INF 1e7
int n;
struct node{
node *l, *r;
int sum;
node(int v = 0){
l = r = NULL; sum = v;
}
node(node* L, node* R){
l = L; r = R;
sum = L->sum + R->sum;
}
};
node* build(int s, int e){
if(s == e){
return new node(0);
}
int m = (s + e)/2;
return new node(build(s, m), build(m+1, e));
}
node* upd(node* i, int s, int e, int indx, int val){
if(s == e){
return new node(val);
}
int m = (s + e)/2;
if(indx <= m) return new node(upd(i->l, s, m, indx, val), i->r);
else return new node(i->l, upd(i->r, m+1, e, indx, val));
}
int query(node* i, int s, int e, int l, int r){
if(l <= s && e <= r) return i->sum;
if(s > e || s > r || e < l) return 0;
int m = (s + e)/2;
return query(i->l, s, m, l, r) + query(i->r, m+1, e, l, r);
}
vector<int> t, lazy;
vector<node*> roots;
void prop(int i, int s, int e){
if(lazy[i] == -1) return;
if(s != e){
lazy[i*2] = lazy[i];
lazy[i*2+1] = lazy[i];
}
if(lazy[i] == INF) t[i] = 0;
else t[i] = query(roots[lazy[i]], 0, n-1, s, e);
lazy[i] = -1;
}
int pro(int i, int s, int e, int indx, int rem, int k, node* pntr){
prop(i, s, e);
//find count here
if(DEBUG) cerr<<"PRO "<<s<<" "<<e<<" "<<indx<<" "<<rem<<" "<<k<<endl;
if(e < indx) return 0;
if(rem <= 0) return 0;
if(DEBUG) cerr<<"PRN: "<<pntr<<endl;
int v = pntr->sum - t[i];
if(DEBUG) cerr<<" V: "<<v<<endl;
if(v <= rem && s >= indx){
//mark them all
lazy[i] = k;
prop(i, s, e);
return v;
}
int m = (s + e)/2;
int done = pro(i*2, s, m, indx, rem, k, pntr->l);
done += pro(i*2+1, m+1, e, indx, rem - done, k, pntr->r);
t[i] = t[i*2] + t[i*2+1];
return done;
}
void clr(){
lazy[1] = INF;
}
void print(node* i, int s, int e){
if(s == e){
cerr<<" N: "<<i<<" "<<s<<" : "<<i->sum<<endl;
return;
}
int m = (s + e)/2;
print(i->l, s, m);
print(i->r, m+1, e);
}
vector<pair<int, int> > a;
void init(int N, int A[], int B[]) {
if(DEBUG) cerr<<"INIT STARTED"<<endl;
n = N;
a.resize(n);
for(int i = 0; i < n; i++){
a[i] = {B[i]-1, A[i]-1};
}
sort(a.begin(), a.end());
vector<vector<int> > f(n);
for(int i = 0; i < n; i++){
f[a[i].second].push_back(i);
}
t = vector<int>(4*n, 0);
lazy = vector<int>(4*n, -1);
node* beg = build(0, n-1);
roots = vector<node*>(n);
for(int i = 0; i < n; i++){
if(i)roots[i] = roots[i-1];
else roots[i] = beg;
for(int u: f[i]){
roots[i] = upd(roots[i], 0, n-1, u, 1);
}
//print(roots[i], 0, n-1);
}
if(DEBUG) cerr<<"INIT ENDED"<<endl;
}
int can(int M, int K[]) {
if(DEBUG) cerr<<"DOING QUERY "<<endl;
vector<int> q(M);
for(int i = 0; i < M; i++){
q[i] = K[i];
}
sort(q.begin(), q.end());
clr();
bool bad = false;
for(int u: q){
//need to find left indxe
int lo = 0, hi = n-1, mid;
while(lo < hi){
mid = (lo + hi)/2;
if(a[mid].first >= u-1){ //its good
hi = mid;
}else{
lo = mid+1;
}
}
mid = (lo + hi)/2;
if(a[mid].first < u-1){
bad = true; break;
}
int done = pro(1, 0, n-1, mid, u, u-1, roots[u-1]);
if(done < u) {
bad = true;
break;
}
}
if(DEBUG) cerr<<"DONE"<<endl;
return bad?0:1;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
256 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
376 KB |
Output is correct |
4 |
Correct |
2 ms |
376 KB |
Output is correct |
5 |
Correct |
2 ms |
376 KB |
Output is correct |
6 |
Correct |
2 ms |
496 KB |
Output is correct |
7 |
Correct |
3 ms |
352 KB |
Output is correct |
8 |
Correct |
3 ms |
376 KB |
Output is correct |
9 |
Correct |
2 ms |
356 KB |
Output is correct |
10 |
Correct |
2 ms |
376 KB |
Output is correct |
11 |
Correct |
2 ms |
420 KB |
Output is correct |
12 |
Correct |
3 ms |
376 KB |
Output is correct |
13 |
Correct |
3 ms |
372 KB |
Output is correct |
14 |
Correct |
3 ms |
376 KB |
Output is correct |
15 |
Correct |
2 ms |
376 KB |
Output is correct |
16 |
Correct |
2 ms |
376 KB |
Output is correct |
17 |
Correct |
2 ms |
296 KB |
Output is correct |
18 |
Correct |
2 ms |
376 KB |
Output is correct |
19 |
Correct |
2 ms |
376 KB |
Output is correct |
20 |
Correct |
2 ms |
376 KB |
Output is correct |
21 |
Correct |
2 ms |
376 KB |
Output is correct |
22 |
Correct |
2 ms |
256 KB |
Output is correct |
23 |
Correct |
2 ms |
256 KB |
Output is correct |
24 |
Correct |
2 ms |
256 KB |
Output is correct |
25 |
Correct |
2 ms |
376 KB |
Output is correct |
26 |
Correct |
2 ms |
256 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
229 ms |
71740 KB |
Output is correct |
2 |
Correct |
270 ms |
72744 KB |
Output is correct |
3 |
Correct |
240 ms |
72756 KB |
Output is correct |
4 |
Correct |
214 ms |
72952 KB |
Output is correct |
5 |
Correct |
140 ms |
71160 KB |
Output is correct |
6 |
Correct |
140 ms |
71124 KB |
Output is correct |
7 |
Correct |
137 ms |
71180 KB |
Output is correct |
8 |
Correct |
138 ms |
71184 KB |
Output is correct |
9 |
Correct |
233 ms |
71024 KB |
Output is correct |
10 |
Correct |
158 ms |
70768 KB |
Output is correct |
11 |
Correct |
140 ms |
70888 KB |
Output is correct |
12 |
Correct |
134 ms |
70896 KB |
Output is correct |
13 |
Correct |
146 ms |
71412 KB |
Output is correct |
14 |
Correct |
149 ms |
71796 KB |
Output is correct |
15 |
Correct |
197 ms |
72568 KB |
Output is correct |
16 |
Correct |
196 ms |
72540 KB |
Output is correct |
17 |
Correct |
138 ms |
71440 KB |
Output is correct |
18 |
Correct |
138 ms |
71364 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
224 ms |
71940 KB |
Output is correct |
2 |
Correct |
218 ms |
73080 KB |
Output is correct |
3 |
Correct |
713 ms |
73192 KB |
Output is correct |
4 |
Correct |
221 ms |
72952 KB |
Output is correct |
5 |
Correct |
484 ms |
71356 KB |
Output is correct |
6 |
Correct |
455 ms |
71428 KB |
Output is correct |
7 |
Correct |
146 ms |
71416 KB |
Output is correct |
8 |
Correct |
372 ms |
71416 KB |
Output is correct |
9 |
Correct |
229 ms |
71152 KB |
Output is correct |
10 |
Correct |
290 ms |
70808 KB |
Output is correct |
11 |
Correct |
315 ms |
71048 KB |
Output is correct |
12 |
Correct |
560 ms |
71152 KB |
Output is correct |
13 |
Correct |
802 ms |
71596 KB |
Output is correct |
14 |
Correct |
823 ms |
72696 KB |
Output is correct |
15 |
Correct |
349 ms |
72696 KB |
Output is correct |
16 |
Correct |
359 ms |
72756 KB |
Output is correct |
17 |
Correct |
328 ms |
71548 KB |
Output is correct |
18 |
Correct |
334 ms |
71604 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1453 ms |
392596 KB |
Output is correct |
2 |
Correct |
1424 ms |
398840 KB |
Output is correct |
3 |
Correct |
2939 ms |
399032 KB |
Output is correct |
4 |
Correct |
1560 ms |
398940 KB |
Output is correct |
5 |
Correct |
1758 ms |
389904 KB |
Output is correct |
6 |
Correct |
1867 ms |
389996 KB |
Output is correct |
7 |
Correct |
762 ms |
389992 KB |
Output is correct |
8 |
Correct |
1584 ms |
390088 KB |
Output is correct |
9 |
Correct |
1305 ms |
389860 KB |
Output is correct |
10 |
Correct |
1138 ms |
387816 KB |
Output is correct |
11 |
Correct |
1552 ms |
388404 KB |
Output is correct |
12 |
Correct |
1766 ms |
388960 KB |
Output is correct |
13 |
Correct |
2765 ms |
391732 KB |
Output is correct |
14 |
Correct |
2985 ms |
397608 KB |
Output is correct |
15 |
Correct |
1581 ms |
397308 KB |
Output is correct |
16 |
Correct |
1569 ms |
397240 KB |
Output is correct |
17 |
Correct |
1302 ms |
391616 KB |
Output is correct |
18 |
Correct |
1346 ms |
391584 KB |
Output is correct |