#include "teams.h"
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define sortvec(x) sort(all(x))
#define compress(x) x.erase(unique(all(x)), x.end())
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
struct NODE{
int val;
NODE *l, *r;
NODE(int _val, NODE *_l=nullptr, NODE *_r=nullptr): val(_val), l(_l), r(_r) {}
NODE* in(int st, int fin, int k){
if(k<st||k>fin)return this;
if(st==fin)return new NODE(this->val+1, l, r);
return new NODE(this->val+1, l->in(st, (st+fin)/2, k), r->in((st+fin)/2+1, fin, k));
}
int query(int st, int fin, int ll, int rr){
if(rr<st||ll>fin)return 0;
if(ll<=st&&rr>=fin)return this->val;
return l->query(st, (st+fin)/2, ll, rr)+r->query((st+fin)/2+1, fin, ll, rr);
}
};
NODE *root[500010];
int pos[500010], n;
void init(int N, int A[], int B[]){
n=N;
vector<pii> vc;
for(int i=0; i<n; i++){
vc.pb(mp(A[i], B[i]));
}
sortvec(vc);
root[0]=new NODE(0);
root[0]->l=root[0]->r=root[0];
for(int i=1; i<=n; i++){
root[i]=root[i-1]->in(1, n, vc[i-1].S);
pos[vc[i-1].F]=i;
}
for(int i=1; i<=n; i++){
if(!pos[i])pos[i]=pos[i-1];
}
}
int can(int m, int k[]){
sort(k, k+m);
vector<int> vc, ch;
for(int i=0; i<m; i++)vc.pb(k[i]);
compress(vc);
ch.resize(vc.size());
int point=0, point2=0;
for(int i=0; i<m; i++){
while(vc[point]<k[i])point++;
if(i&&k[i]!=k[i-1])point2=point;
int temp=k[i];
while(temp&&point2<vc.size()){
int ans;
if(point2==vc.size()-1)ans=root[pos[k[i]]]->query(1, n, vc[point2], n)-ch[point2];
else ans=root[pos[k[i]]]->query(1, n, vc[point2], vc[point2+1]-1)-ch[point2];
ch[point2]+=min(ans, temp);
temp-=min(ans, temp);
if(!temp)break;
point2++;
}
if(temp)return 0;
}
return 1;
}
//thx a lot to short impl. of PST to gnoor
Compilation message
teams.cpp: In function 'int can(int, int*)':
teams.cpp:60:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while(temp&&point2<vc.size()){
~~~~~~^~~~~~~~~~
teams.cpp:62:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(point2==vc.size()-1)ans=root[pos[k[i]]]->query(1, n, vc[point2], n)-ch[point2];
~~~~~~^~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
376 KB |
Output is correct |
4 |
Correct |
3 ms |
504 KB |
Output is correct |
5 |
Correct |
0 ms |
380 KB |
Output is correct |
6 |
Correct |
3 ms |
504 KB |
Output is correct |
7 |
Correct |
2 ms |
376 KB |
Output is correct |
8 |
Correct |
2 ms |
372 KB |
Output is correct |
9 |
Correct |
3 ms |
376 KB |
Output is correct |
10 |
Correct |
2 ms |
376 KB |
Output is correct |
11 |
Correct |
2 ms |
376 KB |
Output is correct |
12 |
Correct |
3 ms |
504 KB |
Output is correct |
13 |
Correct |
3 ms |
376 KB |
Output is correct |
14 |
Correct |
2 ms |
376 KB |
Output is correct |
15 |
Correct |
2 ms |
504 KB |
Output is correct |
16 |
Correct |
2 ms |
380 KB |
Output is correct |
17 |
Correct |
1 ms |
376 KB |
Output is correct |
18 |
Correct |
1 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 |
1 ms |
256 KB |
Output is correct |
22 |
Correct |
0 ms |
248 KB |
Output is correct |
23 |
Correct |
2 ms |
376 KB |
Output is correct |
24 |
Correct |
2 ms |
376 KB |
Output is correct |
25 |
Correct |
2 ms |
376 KB |
Output is correct |
26 |
Correct |
3 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
164 ms |
59728 KB |
Output is correct |
2 |
Correct |
193 ms |
59644 KB |
Output is correct |
3 |
Correct |
214 ms |
59560 KB |
Output is correct |
4 |
Correct |
170 ms |
60476 KB |
Output is correct |
5 |
Correct |
116 ms |
59216 KB |
Output is correct |
6 |
Correct |
118 ms |
59244 KB |
Output is correct |
7 |
Correct |
112 ms |
59284 KB |
Output is correct |
8 |
Correct |
116 ms |
59244 KB |
Output is correct |
9 |
Correct |
112 ms |
57196 KB |
Output is correct |
10 |
Correct |
110 ms |
56960 KB |
Output is correct |
11 |
Correct |
113 ms |
60012 KB |
Output is correct |
12 |
Correct |
110 ms |
57000 KB |
Output is correct |
13 |
Correct |
123 ms |
60256 KB |
Output is correct |
14 |
Correct |
123 ms |
58096 KB |
Output is correct |
15 |
Correct |
154 ms |
59600 KB |
Output is correct |
16 |
Correct |
165 ms |
59528 KB |
Output is correct |
17 |
Correct |
120 ms |
60396 KB |
Output is correct |
18 |
Correct |
118 ms |
60552 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
208 ms |
59788 KB |
Output is correct |
2 |
Correct |
211 ms |
59864 KB |
Output is correct |
3 |
Correct |
312 ms |
62932 KB |
Output is correct |
4 |
Correct |
174 ms |
60484 KB |
Output is correct |
5 |
Correct |
155 ms |
59472 KB |
Output is correct |
6 |
Correct |
147 ms |
59500 KB |
Output is correct |
7 |
Correct |
137 ms |
59516 KB |
Output is correct |
8 |
Correct |
147 ms |
59516 KB |
Output is correct |
9 |
Correct |
115 ms |
57172 KB |
Output is correct |
10 |
Correct |
122 ms |
56996 KB |
Output is correct |
11 |
Correct |
165 ms |
60120 KB |
Output is correct |
12 |
Correct |
1052 ms |
57332 KB |
Output is correct |
13 |
Correct |
394 ms |
60648 KB |
Output is correct |
14 |
Correct |
342 ms |
61244 KB |
Output is correct |
15 |
Correct |
189 ms |
59784 KB |
Output is correct |
16 |
Correct |
188 ms |
59884 KB |
Output is correct |
17 |
Correct |
147 ms |
60684 KB |
Output is correct |
18 |
Correct |
147 ms |
60780 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1144 ms |
333264 KB |
Output is correct |
2 |
Correct |
1176 ms |
333352 KB |
Output is correct |
3 |
Correct |
1481 ms |
337680 KB |
Output is correct |
4 |
Correct |
1036 ms |
333476 KB |
Output is correct |
5 |
Correct |
726 ms |
330464 KB |
Output is correct |
6 |
Correct |
718 ms |
330464 KB |
Output is correct |
7 |
Correct |
672 ms |
330488 KB |
Output is correct |
8 |
Correct |
715 ms |
330536 KB |
Output is correct |
9 |
Correct |
610 ms |
316052 KB |
Output is correct |
10 |
Correct |
639 ms |
329832 KB |
Output is correct |
11 |
Correct |
2197 ms |
330444 KB |
Output is correct |
12 |
Correct |
3396 ms |
330976 KB |
Output is correct |
13 |
Correct |
1647 ms |
332392 KB |
Output is correct |
14 |
Correct |
1500 ms |
332280 KB |
Output is correct |
15 |
Correct |
956 ms |
333272 KB |
Output is correct |
16 |
Correct |
971 ms |
333384 KB |
Output is correct |
17 |
Correct |
705 ms |
333260 KB |
Output is correct |
18 |
Correct |
705 ms |
333356 KB |
Output is correct |