# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
73991 |
2018-08-29T14:06:29 Z |
edisonhello |
Teams (IOI15_teams) |
C++14 |
|
4000 ms |
328364 KB |
// #include"teams.h"
#include<bits/stdc++.h>
#pragma GCC optimize("no-stack-protector")
#pragma GCC target("avx,avx2,sse,sse2,sse3,ssse3,sse4,tune=native")
using namespace std;
struct node{
node *l,*r;
int v;
node():l(0),r(0),v(0){}
} *root[500005],pool[500005*25];
node *gn(node *ref=0){
static int ptr=-1; ++ptr;
if(ref){
pool[ptr].l=ref->l;
pool[ptr].r=ref->r;
pool[ptr].v=ref->v;
}
return &pool[ptr];
}
int n;
pair<int,int> p[500005];
#define mid ((l+r)>>1)
void build(node *now,int l,int r){
if(l==r)return;
build(now->l=gn(),l,mid);
build(now->r=gn(),mid+1,r);
}
void modify(node *now,int l,int r,int x){
++now->v;
if(l==r){ return; }
if(x<=mid)modify(now->l=gn(now->l),l,mid,x);
else modify(now->r=gn(now->r),mid+1,r,x);
}
int query(node *nl,node *nr,int l,int r,int ql,int qr){
if(r<ql || qr<l)return 0;
// cout<<"query range "<<l<<" to "<<r<<" cur v: "<<nl->v<<" and "<<nr->v<<endl;
if(ql<=l&&r<=qr)return nr->v-nl->v;
return query(nl->l,nr->l,l,mid,ql,qr)+query(nl->r,nr->r,mid+1,r,ql,qr);
}
void init(int _n,int _a[],int _b[]){
n=_n;
for(int i=0;i<n;++i)p[i+1]={_a[i],_b[i]};
sort(p+1,p+n+1);
build(root[0]=gn(),1,n);
int ptr=1;
for(int i=1;i<=n;++i){
root[i]=gn(root[i-1]);
while(ptr<=n && p[ptr].first<=i)modify(root[i]=gn(root[i]),1,n,p[ptr].second),++ptr;
}
}
namespace naive{
struct node{
node *l,*r;
int sz,pri,val;
int lz(){ return l?l->sz:0; }
int rz(){ return r?r->sz:0; }
void pull(){ sz=lz()+rz()+1; }
node(int v=0):l(0),r(0),sz(1),pri(rand()),val(v){}
} *root,pool[500005];
int _ptr;
node *gnode(int v){
pool[_ptr].l=0;
pool[_ptr].r=0;
pool[_ptr].sz=1;
pool[_ptr].val=v;
return &pool[_ptr++];
}
node *merge(node *a,node *b){
if(!a)return b; if(!b)return a;
if(a->pri>b->pri){
a->r=merge(a->r,b);
a->pull();
return a;
}
else{
b->l=merge(a,b->l);
b->pull();
return b;
}
}
void split_val(node *now,int val,node *&a,node *&b){
if(!now){ a=b=0; return; }
if(now->val<=val){
a=now;
split_val(now->r,val,a->r,b);
a->pull();
}
else{
b=now;
split_val(now->l,val,a,b->l);
b->pull();
}
}
void split_sz(node *now,int sz,node *&a,node *&b){
if(!now){ a=b=0; return; }
if(now->lz()>=sz){
b=now;
split_sz(now->l,sz,a,b->l);
b->pull();
}
else{
a=now;
split_sz(now->r,sz-1-now->lz(),a->r,b);
a->pull();
}
}
int solve(int m,int k[]){
_ptr=0;
int ptr=1;
for(int i=0;i<m;++i){
while(ptr<=n && p[ptr].first<=k[i]){
node *a,*b;
split_val(root,p[ptr].second,a,b);
root=merge(merge(a,gnode(p[ptr].second)),b);
++ptr;
}
node *a,*b;
split_val(root,k[i]-1,a,b);
if(!b || b->sz<k[i]){
root=0;
return 0;
}
node *c,*d;
split_sz(b,k[i],c,d);
root=d;
}
return 1;
}
}
#define BOUND 580
int dp[BOUND+4];
int can(int m,int k[]){
sort(k,k+m);
// return naive::solve(m,k);
if(m>BOUND)return naive::solve(m,k);
else{
memset(dp,0x3f,sizeof(dp));
for(int i=0;i<m;++i){
int mn=9897788;
for(int j=0;j<=i;++j){
if(j==0)mn=query(root[0],root[k[i]],1,n,k[i],n);
else mn=min(mn,dp[j-1]+query(root[k[j-1]],root[k[i]],1,n,k[i],n));
// cout<<"j: "<<j<<" , mn: "<<mn<<endl;
}
dp[i]=mn-k[i];
// cout<<"at "<<i<<" , dp: "<<dp[i]<<endl;
if(dp[i]<0)return 0;
}
return 1;
}
}
#ifdef WEAK
int l[500005],r[500005];
int main(){
int n; cin>>n;
for(int i=0;i<n;++i)cin>>l[i]>>r[i];
init(n,l,r);
int m; cin>>m; while(m--){
int k; cin>>k;
int *a=new int[k];
for(int i=0;i<k;++i)cin>>a[i];
cout<<can(k,a)<<endl;
}
}
#endif
Compilation message
teams.cpp: In function 'naive::node* naive::merge(naive::node*, naive::node*)':
teams.cpp:79:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
if(!a)return b; if(!b)return a;
^~
teams.cpp:79:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
if(!a)return b; if(!b)return a;
^~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
272 ms |
309572 KB |
Output is correct |
2 |
Correct |
264 ms |
309724 KB |
Output is correct |
3 |
Correct |
234 ms |
309724 KB |
Output is correct |
4 |
Correct |
240 ms |
309756 KB |
Output is correct |
5 |
Correct |
311 ms |
309756 KB |
Output is correct |
6 |
Correct |
272 ms |
309772 KB |
Output is correct |
7 |
Correct |
266 ms |
309772 KB |
Output is correct |
8 |
Correct |
282 ms |
309772 KB |
Output is correct |
9 |
Correct |
250 ms |
309772 KB |
Output is correct |
10 |
Correct |
236 ms |
309772 KB |
Output is correct |
11 |
Correct |
237 ms |
309772 KB |
Output is correct |
12 |
Correct |
260 ms |
309828 KB |
Output is correct |
13 |
Correct |
253 ms |
309828 KB |
Output is correct |
14 |
Correct |
284 ms |
309876 KB |
Output is correct |
15 |
Correct |
285 ms |
309876 KB |
Output is correct |
16 |
Correct |
292 ms |
309876 KB |
Output is correct |
17 |
Correct |
280 ms |
309876 KB |
Output is correct |
18 |
Correct |
267 ms |
309876 KB |
Output is correct |
19 |
Correct |
256 ms |
309876 KB |
Output is correct |
20 |
Correct |
246 ms |
309876 KB |
Output is correct |
21 |
Correct |
240 ms |
309876 KB |
Output is correct |
22 |
Correct |
243 ms |
309876 KB |
Output is correct |
23 |
Correct |
275 ms |
309876 KB |
Output is correct |
24 |
Correct |
318 ms |
309936 KB |
Output is correct |
25 |
Correct |
252 ms |
309936 KB |
Output is correct |
26 |
Correct |
255 ms |
309936 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
306 ms |
312164 KB |
Output is correct |
2 |
Correct |
297 ms |
312216 KB |
Output is correct |
3 |
Correct |
349 ms |
312216 KB |
Output is correct |
4 |
Correct |
304 ms |
312580 KB |
Output is correct |
5 |
Correct |
338 ms |
312580 KB |
Output is correct |
6 |
Correct |
297 ms |
312580 KB |
Output is correct |
7 |
Correct |
293 ms |
312580 KB |
Output is correct |
8 |
Correct |
302 ms |
312580 KB |
Output is correct |
9 |
Correct |
301 ms |
312580 KB |
Output is correct |
10 |
Correct |
337 ms |
312580 KB |
Output is correct |
11 |
Correct |
332 ms |
312580 KB |
Output is correct |
12 |
Correct |
320 ms |
312580 KB |
Output is correct |
13 |
Correct |
300 ms |
312580 KB |
Output is correct |
14 |
Correct |
269 ms |
312580 KB |
Output is correct |
15 |
Correct |
300 ms |
312580 KB |
Output is correct |
16 |
Correct |
337 ms |
312580 KB |
Output is correct |
17 |
Correct |
302 ms |
312580 KB |
Output is correct |
18 |
Correct |
294 ms |
312580 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
361 ms |
312580 KB |
Output is correct |
2 |
Correct |
312 ms |
312580 KB |
Output is correct |
3 |
Correct |
509 ms |
315544 KB |
Output is correct |
4 |
Correct |
340 ms |
315544 KB |
Output is correct |
5 |
Correct |
3383 ms |
315544 KB |
Output is correct |
6 |
Correct |
2425 ms |
315544 KB |
Output is correct |
7 |
Correct |
315 ms |
315544 KB |
Output is correct |
8 |
Correct |
1985 ms |
315544 KB |
Output is correct |
9 |
Correct |
280 ms |
315544 KB |
Output is correct |
10 |
Correct |
382 ms |
315544 KB |
Output is correct |
11 |
Correct |
1267 ms |
315544 KB |
Output is correct |
12 |
Correct |
1713 ms |
315544 KB |
Output is correct |
13 |
Correct |
580 ms |
315544 KB |
Output is correct |
14 |
Correct |
530 ms |
315544 KB |
Output is correct |
15 |
Correct |
436 ms |
315544 KB |
Output is correct |
16 |
Correct |
372 ms |
315544 KB |
Output is correct |
17 |
Correct |
460 ms |
315544 KB |
Output is correct |
18 |
Correct |
428 ms |
315544 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
783 ms |
322444 KB |
Output is correct |
2 |
Correct |
782 ms |
322444 KB |
Output is correct |
3 |
Correct |
1416 ms |
328364 KB |
Output is correct |
4 |
Correct |
873 ms |
328364 KB |
Output is correct |
5 |
Execution timed out |
4050 ms |
328364 KB |
Time limit exceeded |
6 |
Halted |
0 ms |
0 KB |
- |