Submission #686441

#TimeUsernameProblemLanguageResultExecution timeMemory
686441vjudge1Regions (IOI09_regions)C++14
0 / 100
28 ms26092 KiB
#include<stdio.h> #include<vector> #define N 200009 #define M 25000 #define B 999 using namespace std; inline char nc() { static char buf[99999],*l,*r; return l==r&&(r=(l=buf)+fread(buf,1,99999,stdin),l==r)?EOF:*l++; } inline void read(int&x) { char c=nc();for(;c<'0'||'9'<c;c=nc()); for(x=0;'0'<=c&&c<='9';x=(x<<3)+(x<<1)+(c^48),c=nc()); } inline void pc(const char&x) { static char buf[99999],*r=buf; (!x||(*r++=x,r==buf+99999))&&(fwrite(buf,1,r-buf,stdout),r=buf); } inline void pr(const int&x){if(x>9)pr(x/10);pc(x%10+'0');} int n,m,q,a[N],ans[N],dfn[N],sz[N],now,szsz[N],rem[N],tim[N]; vector<int>e[N],b[N],c[N],id[N]; inline int dfs(const int&i) { dfn[i]=++now;sz[i]=1; ++rem[a[i]]; if(c[a[i]].size()<=B)for(int j=0;j<c[a[i]].size();++j) ans[id[a[i]][j]]+=rem[c[a[i]][j]]; for(int j=0;j<e[i].size();++j)sz[i]+=dfs(e[i][j]); --rem[a[i]]; return sz[i]; } inline void upd(int i,const int&x){for(;i<=n;szsz[i]+=x,i+=i&-i);} inline int qry(int i){int ans=0;for(;i;ans+=szsz[i],i&=i-1);return ans;} main() { read(n);read(m);read(q);read(a[0]); for(int i=1,f;i<n;++i)read(f),e[--f].emplace_back(i),read(a[i]); for(int i=0;i<n;++i)b[--a[i]].emplace_back(i); for(int i=0,u,v;i<q;++i) { read(u);read(v);--u;--v; c[v].emplace_back(u);id[v].emplace_back(i); } dfs(0); for(int i=0;i<m;tim[i++]=-1); for(int i=0;i<m;++i)if(c[i].size()>B) { for(int j=0;j<b[i].size();++j)upd(dfn[b[i][j]],1); for(int j=0;j<c[i].size();++j) { int&wr=rem[c[i][j]]; if(tim[c[i][j]]^i) { wr=0;tim[c[i][j]]=i; for(int k:b[c[i][j]])wr+=qry(dfn[k]+sz[k]-1)-qry(dfn[k]-1); } ans[id[i][j]]=wr; } for(int j=0;j<b[i].size();++j)upd(dfn[b[i][j]],-1); } for(int i=0;i<q;pr(ans[i++]),pc('\n'));pc(0); }

Compilation message (stderr)

regions.cpp: In function 'int dfs(const int&)':
regions.cpp:29:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |  if(c[a[i]].size()<=B)for(int j=0;j<c[a[i]].size();++j)
      |                                   ~^~~~~~~~~~~~~~~
regions.cpp:31:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |  for(int j=0;j<e[i].size();++j)sz[i]+=dfs(e[i][j]);
      |              ~^~~~~~~~~~~~
regions.cpp: At global scope:
regions.cpp:37:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   37 | main()
      | ^~~~
regions.cpp: In function 'int main()':
regions.cpp:51:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |   for(int j=0;j<b[i].size();++j)upd(dfn[b[i][j]],1);
      |               ~^~~~~~~~~~~~
regions.cpp:52:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |   for(int j=0;j<c[i].size();++j)
      |               ~^~~~~~~~~~~~
regions.cpp:62:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |   for(int j=0;j<b[i].size();++j)upd(dfn[b[i][j]],-1);
      |               ~^~~~~~~~~~~~
regions.cpp:64:2: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   64 |  for(int i=0;i<q;pr(ans[i++]),pc('\n'));pc(0);
      |  ^~~
regions.cpp:64:41: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   64 |  for(int i=0;i<q;pr(ans[i++]),pc('\n'));pc(0);
      |                                         ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...