Submission #686451

#TimeUsernameProblemLanguageResultExecution timeMemory
686451vjudge1Regions (IOI09_regions)C++14
0 / 100
81 ms27784 KiB
#include<stdio.h> #include<vector> #define N 200009 #define M 25000 #define B 999 using namespace std; inline void read(int&x){scanf("%d",&x);} 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:20:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   20 |  if(c[a[i]].size()<=B)for(int j=0;j<c[a[i]].size();++j)
      |                                   ~^~~~~~~~~~~~~~~
regions.cpp:22:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |  for(int j=0;j<e[i].size();++j)sz[i]+=dfs(e[i][j]);
      |              ~^~~~~~~~~~~~
regions.cpp: At global scope:
regions.cpp:28:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   28 | main()
      | ^~~~
regions.cpp: In function 'int main()':
regions.cpp:42:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |   for(int j=0;j<b[i].size();++j)upd(dfn[b[i][j]],1);
      |               ~^~~~~~~~~~~~
regions.cpp:43:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |   for(int j=0;j<c[i].size();++j)
      |               ~^~~~~~~~~~~~
regions.cpp:53:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |   for(int j=0;j<b[i].size();++j)upd(dfn[b[i][j]],-1);
      |               ~^~~~~~~~~~~~
regions.cpp:55:2: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   55 |  for(int i=0;i<q;pr(ans[i++]),pc('\n'));pc(0);
      |  ^~~
regions.cpp:55:41: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   55 |  for(int i=0;i<q;pr(ans[i++]),pc('\n'));pc(0);
      |                                         ^~
regions.cpp: In function 'void read(int&)':
regions.cpp:7:30: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    7 | inline void read(int&x){scanf("%d",&x);}
      |                         ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...