Submission #496084

#TimeUsernameProblemLanguageResultExecution timeMemory
496084mosiashvililukaRegions (IOI09_regions)C++14
100 / 100
3097 ms87576 KiB
#include<bits/stdc++.h> using namespace std; int a,b,c,d,e,i,j,ii,jj,zx,xc,tes,t,f[200009],k[200009],T=167,K[200009],F[200009],TT,lf[200009],rg[200009],tim,C,D,lef,rig,mid; //int ans[630][25002],ZX; int ans[1202][25002],ZX; vector <int> v[200009]; vector <pair <int, int> > vv[200009]; void dfs(int q, int w){ tim++; lf[q]=rg[q]=tim; int qw=vv[f[q]].size(); vv[f[q]].push_back(make_pair(lf[q],0)); for(int h=1; h<=TT; h++){ ans[h][f[q]]+=k[h]; } if(F[f[q]]!=0) k[F[f[q]]]++; for(vector <int>::iterator it=v[q].begin(); it!=v[q].end(); it++){ if((*it)==w) continue; dfs((*it),q); if(rg[q]<rg[(*it)]) rg[q]=rg[(*it)]; } vv[f[q]][qw].second=rg[q]; if(F[f[q]]!=0) k[F[f[q]]]--; } int main(){ ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>a>>zx>>tes; cin>>f[1]; for(i=2; i<=a; i++){ cin>>c>>f[i]; v[c].push_back(i); } for(i=1; i<=a; i++){ K[f[i]]++; } TT=0; for(i=1; i<=a; i++){ if(K[i]>T){ TT++;F[i]=TT; } } dfs(1,0); for(t=1; t<=tes; t++){ cin>>c>>d; if(vv[c].size()>T){ cout<<ans[F[c]][d]<<endl; }else{ C=vv[c].size();D=vv[d].size();ZX=0; for(vector <pair <int, int> >::iterator it=vv[c].begin(); it!=vv[c].end(); it++){ lef=-1;rig=D; while(lef+1<rig){ mid=((lef+rig)>>1); if(vv[d][mid].first>=(*it).first){ rig=mid; }else{ lef=mid; } } ii=rig; lef=ii-1;rig=D; while(lef+1<rig){ mid=((lef+rig)>>1); if(vv[d][mid].first<=(*it).second){ lef=mid; }else{ rig=mid; } } jj=lef; ZX+=(jj-ii+1); } cout<<ZX<<endl; } } return 0; }

Compilation message (stderr)

regions.cpp: In function 'int main()':
regions.cpp:45:18: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   45 |   if(vv[c].size()>T){
      |      ~~~~~~~~~~~~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...