Submission #904053

#TimeUsernameProblemLanguageResultExecution timeMemory
904053simona1230Inside information (BOI21_servers)C++17
0 / 100
181 ms10456 KiB
#include <bits/stdc++.h> using namespace std; int n,k; int in[4001][4001]; char C[240001]; int X[240001],Y[240001]; bool sbt2=1,sbt3=1; void read() { cin>>n>>k; for(int i=1;i<=n+k-1;i++) { cin>>C[i]>>X[i]; if(C[i]!='C')cin>>Y[i]; if(C[i]=='S'&&min(X[i],Y[i])!=1)sbt2=0; if(C[i]=='S'&&abs(X[i]-Y[i])!=1)sbt3=0; } } void slow() { for(int i=1;i<=n;i++) in[i][i]=1; for(int i=1;i<=n+k-1;i++) { int x,y; char c; x=X[i]; y=Y[i]; c=C[i]; if(c=='S') { for(int j=1;j<=n;j++) { in[x][j]=in[y][j]=max(in[x][j],in[y][j]); } } if(c=='C') { int cnt=0; for(int j=1;j<=n;j++) cnt+=in[j][x]; cout<<cnt<<endl; } if(c=='Q') { if(in[x][y])cout<<"yes"<<endl; else cout<<"no"<<endl; } } } int t[120001]; void subt2() { t[1]=1; int sec=2; for(int i=1;i<=n+k-1;i++) { int x,y; char c; x=X[i]; y=Y[i]; c=C[i]; if(c=='S') { t[max(x,y)]=sec++; } if(c=='Q') { if(t[y]&&t[y]<=t[x]||x==1&&t[y]||y==1&&t[x]||x==y)cout<<"yes"<<endl; else cout<<"no"<<endl; } if(c=='C') { if(t[x]==0)cout<<1<<endl; else if(x==1)cout<<sec-1<<endl; else cout<<sec-t[x]+1<<endl; } } } int inc[120001],de[120001]; int find_inc(int ver) { if(ver==inc[ver])return ver; return inc[ver]=find_inc(inc[ver]); } int find_de(int ver) { if(ver==de[ver])return ver; return de[ver]=find_de(de[ver]); } void subt3() { int sec=1; for(int i=1;i<=n+k-1;i++) { int x,y; char c; x=X[i]; y=Y[i]; c=C[i]; if(c=='S') { if(y<x)swap(x,y); t[x]=sec++; inc[x]=de[x]=x; if(t[x-1])inc[x-1]=x; if(t[x+1])de[x+1]=x; } if(c=='Q') { swap(x,y); int ver=x; if(y>x) { if(!t[ver]) { cout<<"no"<<endl; continue; } ver=find_inc(ver); if(ver+1>=y)cout<<"yes"<<endl; else cout<<"no"<<endl; } else if(x>y) { if(!t[ver-1]) { cout<<"no"<<endl; continue; } ver=find_de(ver-1); if(ver<=y)cout<<"yes"<<endl; else cout<<"no"<<endl; } else cout<<"yes"<<endl; } if(c=='C') { int cnt=1; /*for(int j=1;j<n;j++) cout<<inc[j]<<" "; cout<<endl;*/ if(x!=n&&t[x]) { //cout<<"! "<<x<<endl; cnt+=find_inc(x)-x+1; } if(x!=1&&t[x-1]) { //cout<<"!! "<<x-1<<endl; cnt+=x-find_de(x-1); } cout<<cnt<<endl; } } } int cnt[120001]; int p[120001]; int used[120001]; void subt4() { for(int i=1;i<=n;i++) cnt[i]=1; int sec=1; for(int i=1;i<=n+k-1;i++) { //cout<<i<<": "<<endl; int x=X[i],y=Y[i]; char c=C[i]; if(c=='S') { int ver=max(x,y); p[ver]=min(x,y); t[ver]=sec++; int last=sec; while(p[ver]&&t[ver]<last&&t[ver]) { last=t[ver]; ver=p[ver]; //cout<<ver<<" "<<cnt[max(x,y)]<<endl; cnt[ver]+=cnt[max(x,y)]; } } if(c=='C') { int curr=cnt[x],ver=x,last=0; if(t[x])curr--; if(t[x]&&t[x*2]&&t[x*2]>t[x])curr-=cnt[x*2]; if(t[x]&&t[x*2+1]&&t[x*2+1]>t[x])curr-=cnt[x*2+1]; while(p[ver]&&t[ver]>last&&t[ver]) { last=t[ver]; ver=p[ver]; //cout<<ver<<" - "<<cnt[ver]<<endl; curr+=cnt[ver]; } cout<<curr<<endl; } if(c=='Q') { int ver=y,last=0; bool pos=0; while(p[ver]&&t[ver]>last&&t[ver]) { last=t[ver]; ver=p[ver]; used[ver]=i; if(ver==x)pos=1; } ver=x,last=sec; while(p[ver]&&t[ver]<last&&t[ver]) { last=t[ver]; ver=p[ver]; if(used[ver]==i||ver==y)pos=1; } if(pos)cout<<"yes"<<endl; else cout<<"no"<<endl; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); read(); /*if(n<=4000)slow(); else if(sbt2)subt2(); else if(sbt3)subt3(); else*/ subt4(); return 0; }

Compilation message (stderr)

servers.cpp: In function 'void subt2()':
servers.cpp:74:20: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   74 |             if(t[y]&&t[y]<=t[x]||x==1&&t[y]||y==1&&t[x]||x==y)cout<<"yes"<<endl;
      |                ~~~~^~~~~~~~~~~~
servers.cpp:74:50: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   74 |             if(t[y]&&t[y]<=t[x]||x==1&&t[y]||y==1&&t[x]||x==y)cout<<"yes"<<endl;
      |                                              ~~~~^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...