Submission #738280

#TimeUsernameProblemLanguageResultExecution timeMemory
738280mosiashvililukaI want to be the very best too! (NOI17_pokemonmaster)C++14
71 / 100
4187 ms21920 KiB
#include<bits/stdc++.h> using namespace std; const int T=317; int a,b,c,d,e,i,j,ii,jj,zx,xc,tes,t,tp,pas,Ffx[50009],sub1,f[50009],fen[50009],TP[100009],msh[100009],zm[100009],ones[100009],QI,bo[100009],I,ZI,ans[100009],ZOMA[100009],KK[100009]; //pair <pair <int, int>, int> p[100009]; pair <int, int> Q[100009],Z[100009]; int X[100009],Y[100009],col[100009]; vector <vector <int> > L,P,Lbo,id,DZ; vector <int> v[100009],V[100009]; set <int> s[50009]; void dfs(int q, int w){ if(q<1||q>a||w<1||w>b) return; if(L[q][w]>e) return; if(Lbo[q][w]==t) return; Lbo[q][w]=t; if(Ffx[P[q][w]]!=t){ pas++; Ffx[P[q][w]]=t; } dfs(q-1,w); dfs(q+1,w); dfs(q,w-1); dfs(q,w+1); } void upd(int q, int w){ while(q<=a+3){ fen[q]+=w; q=q+(q&(-q)); } } int read(int q){ int sm=0; while(q>0){ sm+=fen[q]; q=q-(q&(-q)); } return sm; } int fnd(int q){ if(msh[q]==q) return q; else return msh[q]=fnd(msh[q]); } void mrg(int q, int w){ q=fnd(q);w=fnd(w); if(q==w) return; msh[w]=q; if(zm[q]==zm[w]) zm[q]++; ones[q]+=ones[w]; ZOMA[q]+=ZOMA[w]; } void ADD(int q){ //cout<<"ADD "<<q<<"\n"; bo[q]=1; for(vector <int>::iterator it=v[q].begin(); it!=v[q].end(); it++){ if(bo[(*it)]==0) continue; //cout<<"mrg "<<q<<" "<<(*it)<<"\n"; mrg(q,(*it)); } } int main(){ ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>a>>b>>tes; L.resize(a+2);P.resize(a+2); for(i=0; i<a+2; i++){ L[i].resize(b+2);P[i].resize(b+2); } Lbo=L;id=L; for(i=1; i<=a; i++){ for(j=1; j<=b; j++){ cin>>L[i][j]; id[i][j]=(i-1)*b+j; } } DZ=L; for(i=1; i<=a; i++){ for(j=1; j<=b; j++){ for(ii=-1; ii<=1; ii++){ for(jj=-1; jj<=1; jj++){ if(ii!=0&&jj!=0) continue; if(ii==0&&jj==0) continue; c=i+ii;d=j+jj; //cout<<c<<" "<<d<<" cd\n"; if(c<1||c>a||d<1||d>b) continue; //cout<<"Fdsf\n"; v[id[i][j]].push_back(id[c][d]); } } } } for(i=1; i<=a; i++){ for(j=1; j<=b; j++){ cin>>P[i][j]; } } if(a!=1) sub1=1; for(j=1; j<=b; j++){ if(L[1][j]!=j) sub1=1; } if(sub1==0){ //cout<<"sub1\n"; set <int>::iterator it,tt; a=b; for(i=1; i<=a; i++) f[i]=P[1][i]; // for(i=1; i<=a; i++){ s[f[i]].insert(i); } for(i=1; i<=a; i++){ if(Ffx[f[i]]!=0) continue; Ffx[f[i]]=1; it=s[f[i]].begin(); upd((*it),1); } for(t=1; t<=tes; t++){ cin>>tp; if(tp==1){ cin>>c>>d>>e;swap(c,d); c=d; it=s[f[c]].begin(); upd((*it),-1); s[f[c]].erase(s[f[c]].lower_bound(c)); if(s[f[c]].size()>0){ it=s[f[c]].begin(); upd((*it),1); } // f[c]=e; // if(s[f[c]].size()>0){ it=s[f[c]].begin(); upd((*it),-1); } s[f[c]].insert(c); it=s[f[c]].begin(); upd((*it),1); continue; } if(tp==2){ cin>>c>>d>>e;swap(c,d); c=d; if(c>e){ cout<<"0\n"; continue; } cout<<read(min(a,e))<<"\n"; } } return 0; } if(tes<=10){ for(t=1; t<=tes; t++){ cin>>tp; if(tp==1){ cin>>c>>d>>e;swap(c,d); P[c][d]=e; continue; } if(tp==2){ cin>>c>>d>>e;pas=0;swap(c,d); dfs(c,d); cout<<pas<<"\n"; continue; } } return 0; } int L,R; for(t=1; t<=tes; t++){ cin>>TP[t]; //cin>>p[t].first.first>>p[t].first.second>>p[t].second; cin>>X[t]>>Y[t]>>col[t]; swap(X[t],Y[t]); } // for(ii=1; ; ii++){ if((ii-1)*T+1>tes) break; L=(ii-1)*T+1; R=min(tes,ii*T); if(ii!=1){ for(i=L-T; i<L; i++){ if(TP[i]==1){ P[X[i]][Y[i]]=col[i]; } } } QI=0; for(i=1; i<=a; i++){ for(j=1; j<=b; j++){ msh[id[i][j]]=id[i][j];zm[id[i][j]]=0;ZOMA[id[i][j]]=1; if(P[i][j]==1) ones[id[i][j]]=1; else ones[id[i][j]]=0; QI++;Q[QI]={DZ[i][j],id[i][j]}; bo[id[i][j]]=0; } } //cout<<ones[id[1][1]]<<" "<<ones[id[1][2]]<<" "<<ones[id[1][3]]<<" ones\n"; sort(Q+1,Q+QI+1); ZI=0; for(t=L; t<=R; t++){ if(TP[t]==2){ ZI++;Z[ZI]={col[t],t}; } } sort(Z+1,Z+ZI+1); // // /*for(ii=1; ii<=QI; ii++){ ADD(Q[ii].second); }*/ /*cout<<QI<<" QI"<<endl; for(i=1; i<=QI; i++){ cout<<Q[i].first<<" "<<Q[i].second<<endl; } cout<<ZI<<" ZI"<<endl; for(i=1; i<=ZI; i++){ cout<<Z[i].first<<" "<<Z[i].second<<endl; }*/ //return 0; I=1; for(int ii=1; ii<=ZI; ii++){ //cout<<ii<<endl; //if(ii==2) return 0; t=Z[ii].second; while(I<=QI&&Q[I].first<=col[t]){ ADD(Q[I].second);I++; } //if(ii==2) return 0; if(DZ[X[t]][Y[t]]>col[t]){ ans[t]=0; continue; } c=fnd(id[X[t]][Y[t]]); zx=ones[c];xc=ZOMA[c]-ones[c]; //cout<<zx<<" "<<xc<<"\n"; for(i=L; i<t; i++){ KK[id[X[i]][Y[i]]]=P[X[i]][Y[i]]; } //cout<<ii<<" "<<I<<" iiI\n"; //if(t==tes) cout<<zx<<" "<<xc<<" tt\n"; for(i=L; i<t; i++){ if(TP[i]!=1) continue; if(fnd(id[X[i]][Y[i]])!=c) continue; //cout<<"iquery "<<i<<"\n"; if(P[X[i]][Y[i]]==1) zx--; else xc--; P[X[i]][Y[i]]=col[i]; if(P[X[i]][Y[i]]==1) zx++; else xc++; } for(i=L; i<t; i++){ P[X[i]][Y[i]]=KK[id[X[i]][Y[i]]]; } pas=0; if(zx!=0) pas++; if(xc!=0) pas++; ans[t]=pas; //if(ii==2) return 0; } //return 0; } for(t=1; t<=tes; t++){ if(TP[t]==1) continue; cout<<ans[t]<<"\n"; } return 0; }
#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...