# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
569733 |
2022-05-27T16:52:19 Z |
CSQ31 |
Teams (IOI15_teams) |
C++17 |
|
1284 ms |
414384 KB |
#pragma GCC optimize("Ofast")
#include "teams.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
#define fi first
#define se second
const int MAXN = 5e5+5;
struct node{
int x,lf = -1,rg = -1;
node(){}
};
node T[MAXN*60];
int ccnt = 0;
void pull(int v){
T[v].x = 0;
if(T[v].lf!=-1)T[v].x+=T[T[v].lf].x;
if(T[v].rg!=-1)T[v].x+=T[T[v].rg].x;
}
int copy(int v){
T[++ccnt] = T[v];
return ccnt;
}
int newnode(){
ccnt++;
T[ccnt].x = 0;
T[ccnt].lf = T[ccnt].rg = -1;
return ccnt;
}
int add(int v,int l,int r,int pos,int x){
int me = copy(v);
if(l==r){
T[me].x+=x;
return me;
}
int tm = (l+r)/2;
if(pos<=tm){
if(T[v].lf == -1)T[v].lf = newnode();
T[me].lf = add(T[v].lf,l,tm,pos,x);
}else{
if(T[v].rg == -1)T[v].rg = newnode();
T[me].rg = add(T[v].rg,tm+1,r,pos,x);
}
pull(me);
return me;
}
int zero(int used,int l,int r,int tl,int tr){
int v = copy(used);
if(l<=tl && tr<=r){
T[v].x = 0;
T[v].lf = T[v].rg = -1;
return v;
}
int tm = (tl+tr)/2;
if(r<=tm){
if(T[v].lf != -1)T[v].lf = zero(T[used].lf,l,r,tl,tm);
}
else if(l >tm){
if(T[v].rg != -1)T[v].rg = zero(T[used].rg,l,r,tm+1,tr);
}else{
if(T[v].lf != -1)T[v].lf = zero(T[used].lf,l,tm,tl,tm);
if(T[v].rg != -1)T[v].rg = zero(T[used].rg,tm+1,r,tm+1,tr);
}
pull(v);
return v;
}
vector<int>seg;
int n;
bool kek = 1;
int walk(int avi,int used,int l,int r,int k){
//cout<<l<<" "<<r<<" "<<T[avi].x<<" "<<T[used].x<<" "<<k<<'\n';
int v = copy(used);
if(T[avi].x - T[v].x < k || !k){
kek = 0;
return v;
}
if(l==r){
T[v].x += k;
return v;
}
int tm = (l+r)/2;
int val = 0;
if(T[v].lf == -1)T[v].lf = newnode();
if(T[v].rg == -1)T[v].rg = newnode();
if(T[avi].lf != -1)val+=T[T[avi].lf].x;
val-=T[T[v].lf].x;
if(val>=k)T[v].lf = walk(T[avi].lf,T[v].lf,l,tm,k);
else{
T[v].lf = T[avi].lf;
T[v].rg = walk(T[avi].rg,T[v].rg,tm+1,r,k-val);
}
pull(v);
return v;
}
void init(int N, int A[], int B[]) {
n = N;
seg.push_back(0);
vector<map<int,int>>cnt(n+1);
vector<int>cnt1(n+2,0);
for(int i=0;i<n;i++){
cnt[A[i]][B[i]]++;
cnt1[B[i]+1]++;
}
for(int i=1;i<=n;i++){
seg.push_back(copy(seg.back()));
for(auto x:cnt[i]){
//cout<<i<<" "<<x.fi<<" "<<x.se<<'\n';
seg.back() = add(seg.back(),1,n,x.fi,x.se);
}
if(cnt1[i])seg.back() = add(seg.back(),1,n,i-1,-cnt1[i]);
}
}
int can(int m, int K[]) {
int sum = 0;
map<int,int>cnt;
for(int i=0;i<m;i++){
sum+=K[i];
cnt[K[i]]++;
if(sum>n)return 0;
}
vector<pii>a;
for(auto x:cnt)a.push_back(x);
int old = ccnt;
int used = newnode();
kek = 1;
for(auto x:a){
//cout<<x.fi<<" "<<x.se<<'\n';
if(x.fi>1)used = zero(used,1,x.fi-1,1,n);
used = walk(seg[x.fi],used,1,n,x.fi*x.se);
if(!kek)break;
}
for(int i=old+1;i<=ccnt;i++){
T[i].x = 0;
T[i].lf = T[i].rg = -1;
}
ccnt = old;
return kek;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
193 ms |
352520 KB |
Output is correct |
2 |
Correct |
192 ms |
352432 KB |
Output is correct |
3 |
Correct |
189 ms |
352532 KB |
Output is correct |
4 |
Correct |
207 ms |
352528 KB |
Output is correct |
5 |
Correct |
189 ms |
352440 KB |
Output is correct |
6 |
Correct |
185 ms |
352756 KB |
Output is correct |
7 |
Correct |
200 ms |
352460 KB |
Output is correct |
8 |
Correct |
190 ms |
352440 KB |
Output is correct |
9 |
Correct |
181 ms |
352548 KB |
Output is correct |
10 |
Correct |
194 ms |
352516 KB |
Output is correct |
11 |
Correct |
204 ms |
352452 KB |
Output is correct |
12 |
Correct |
192 ms |
352488 KB |
Output is correct |
13 |
Correct |
193 ms |
352564 KB |
Output is correct |
14 |
Correct |
196 ms |
352520 KB |
Output is correct |
15 |
Correct |
177 ms |
352464 KB |
Output is correct |
16 |
Correct |
184 ms |
352588 KB |
Output is correct |
17 |
Correct |
207 ms |
352480 KB |
Output is correct |
18 |
Correct |
181 ms |
352488 KB |
Output is correct |
19 |
Correct |
182 ms |
352476 KB |
Output is correct |
20 |
Correct |
191 ms |
352528 KB |
Output is correct |
21 |
Correct |
188 ms |
352460 KB |
Output is correct |
22 |
Correct |
184 ms |
352604 KB |
Output is correct |
23 |
Correct |
223 ms |
352460 KB |
Output is correct |
24 |
Correct |
186 ms |
352452 KB |
Output is correct |
25 |
Correct |
188 ms |
352532 KB |
Output is correct |
26 |
Correct |
218 ms |
352512 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
290 ms |
364904 KB |
Output is correct |
2 |
Correct |
282 ms |
364924 KB |
Output is correct |
3 |
Correct |
298 ms |
364840 KB |
Output is correct |
4 |
Correct |
298 ms |
365100 KB |
Output is correct |
5 |
Correct |
198 ms |
359880 KB |
Output is correct |
6 |
Correct |
206 ms |
359844 KB |
Output is correct |
7 |
Correct |
196 ms |
359752 KB |
Output is correct |
8 |
Correct |
197 ms |
359852 KB |
Output is correct |
9 |
Correct |
200 ms |
359864 KB |
Output is correct |
10 |
Correct |
195 ms |
359500 KB |
Output is correct |
11 |
Correct |
195 ms |
359728 KB |
Output is correct |
12 |
Correct |
220 ms |
359780 KB |
Output is correct |
13 |
Correct |
207 ms |
360812 KB |
Output is correct |
14 |
Correct |
239 ms |
362284 KB |
Output is correct |
15 |
Correct |
272 ms |
363900 KB |
Output is correct |
16 |
Correct |
252 ms |
363976 KB |
Output is correct |
17 |
Correct |
215 ms |
360172 KB |
Output is correct |
18 |
Correct |
209 ms |
360280 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
316 ms |
365064 KB |
Output is correct |
2 |
Correct |
297 ms |
365120 KB |
Output is correct |
3 |
Correct |
402 ms |
365060 KB |
Output is correct |
4 |
Correct |
296 ms |
365040 KB |
Output is correct |
5 |
Correct |
265 ms |
360028 KB |
Output is correct |
6 |
Correct |
252 ms |
360008 KB |
Output is correct |
7 |
Correct |
223 ms |
359992 KB |
Output is correct |
8 |
Correct |
248 ms |
360060 KB |
Output is correct |
9 |
Correct |
213 ms |
359808 KB |
Output is correct |
10 |
Correct |
204 ms |
359664 KB |
Output is correct |
11 |
Correct |
203 ms |
359732 KB |
Output is correct |
12 |
Correct |
259 ms |
359876 KB |
Output is correct |
13 |
Correct |
301 ms |
361096 KB |
Output is correct |
14 |
Correct |
427 ms |
364876 KB |
Output is correct |
15 |
Correct |
309 ms |
364188 KB |
Output is correct |
16 |
Correct |
334 ms |
364132 KB |
Output is correct |
17 |
Correct |
244 ms |
360404 KB |
Output is correct |
18 |
Correct |
254 ms |
360428 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
969 ms |
413828 KB |
Output is correct |
2 |
Correct |
999 ms |
412500 KB |
Output is correct |
3 |
Correct |
1149 ms |
412428 KB |
Output is correct |
4 |
Correct |
933 ms |
414384 KB |
Output is correct |
5 |
Correct |
404 ms |
388160 KB |
Output is correct |
6 |
Correct |
382 ms |
388220 KB |
Output is correct |
7 |
Correct |
281 ms |
388128 KB |
Output is correct |
8 |
Correct |
386 ms |
388120 KB |
Output is correct |
9 |
Correct |
233 ms |
388624 KB |
Output is correct |
10 |
Correct |
256 ms |
386912 KB |
Output is correct |
11 |
Correct |
278 ms |
387268 KB |
Output is correct |
12 |
Correct |
384 ms |
388032 KB |
Output is correct |
13 |
Correct |
644 ms |
393768 KB |
Output is correct |
14 |
Correct |
1284 ms |
413412 KB |
Output is correct |
15 |
Correct |
827 ms |
406212 KB |
Output is correct |
16 |
Correct |
810 ms |
406388 KB |
Output is correct |
17 |
Correct |
325 ms |
390564 KB |
Output is correct |
18 |
Correct |
351 ms |
390644 KB |
Output is correct |