제출 #846881

#제출 시각아이디문제언어결과실행 시간메모리
846881Ahmed57Inside information (BOI21_servers)C++17
52.50 / 100
826 ms132688 KiB
#include <bits/stdc++.h> using namespace std; int NODES=0; bool seg[44000007];int L[44000007],R[44000007],n; void update(int p, int q, int l, int r, int x) { if(l==r){seg[p]=1;return;} int md = (l+r)/2; seg[p]=1; if(x<=md)R[p]=R[q],L[p]=++NODES,update(L[p],L[q],l,md,x); else L[p]=L[q],R[p]=++NODES,update(R[p],R[q],md+1,r,x); } bool query(int p,int l,int r,int x){ if(l==r){ return seg[p]; } int md=(l+r)/2; if(x<=md)return query(L[p],l,md,x); else return query(R[p],md+1,r,x); } vector<int> v; void iterate(int p,int l,int r){ if(!seg[p])return; if(l==r)v.push_back(l); else{ int md=(l+r)/2; iterate(L[p],l,md); iterate(R[p],md+1,r); } } int pr[125001]; int gs[125001]; void merg(int a,int b){ if(gs[a]>gs[b])swap(a,b); iterate(pr[a],1,n);int tm; for(auto x:v){ tm = ++NODES; update(tm,pr[b],1,n,x); pr[b]=tm; } pr[a]=tm,pr[b]=tm,gs[b]+=gs[a],gs[a]=gs[b]; v.clear(); } int main(){ int q;cin>>n>>q; if(n<=4000){ vector<int> v[n+1]; for(int i = 1;i<=n;i++)v[i].push_back(i); int cnt[n+1] = {0}; for(int i = 1;i<=n;i++)cnt[i] = 1; q+=n-1; while(q--){ char s;cin>>s; if(s=='S'){ int a,b;cin>>a>>b; set<int> x; for(auto i:v[a]){x.insert(i);cnt[i]--;} for(auto i:v[b]){x.insert(i);cnt[i]--;} v[a].clear();v[b].clear(); for(auto i:x){ v[a].push_back(i); v[b].push_back(i); cnt[i]+=2; } }else if(s=='C'){ int a;cin>>a; cout<<cnt[a]<<endl; }else{ int a,b;cin>>a>>b; auto it = lower_bound(v[a].begin(),v[a].end(),b)-v[a].begin(); if(it==v[a].size()||v[a][it]!=b)cout<<"no\n"; else cout<<"yes\n"; } } return 0; } for(int i = 1;i<=n;i++){ pr[i] = ++NODES , gs[i] = 1; } for(int i = 1;i<=n;i++){ int tm = ++NODES; update(tm,pr[i],1,n,i); pr[i]=tm; } q+=n-1; while(q--){ char c;cin>>c; if(c=='S'){int a,b;cin>>a>>b;merg(a,b);} else{ int a,b;cin>>a>>b; cout<<(query(pr[a],1,n,b)?"yes\n":"no\n"); } } }

컴파일 시 표준 에러 (stderr) 메시지

servers.cpp: In function 'int main()':
servers.cpp:71:18: warning: comparison of integer expressions of different signedness: 'long int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |             if(it==v[a].size()||v[a][it]!=b)cout<<"no\n";
      |                ~~^~~~~~~~~~~~~
servers.cpp: In function 'void merg(int, int)':
servers.cpp:41:10: warning: 'tm' may be used uninitialized in this function [-Wmaybe-uninitialized]
   41 |     pr[a]=tm,pr[b]=tm,gs[b]+=gs[a],gs[a]=gs[b];
      |     ~~~~~^~~
#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...