Submission #1189120

#TimeUsernameProblemLanguageResultExecution timeMemory
1189120WarinchaiThe Potion of Great Power (CEOI20_potion)C++20
38 / 100
460 ms327680 KiB
#include<bits/stdc++.h> using namespace std; int n,d,h[200005]; int have[400005][505]; //bruhhhh sqrt decom needed to optimize mem?? int sz[400005]; int inf=1e9; int prv[200005]; void init(int N, int D, int H[]) { n=N,d=D; for(int i=0;i<n;i++){ h[i]=H[i]; } for(int i=0;i<n;i++)prv[i]=-1,sz[i]=-1; } int cnt[200005]; vector<int>ids[200005]; void curseChanges(int U, int A[], int B[]) { for(int i=0;i<U;i++){ cnt[A[i]]++;cnt[B[i]]++; int h=0; int id=i*2; int cur=-1; if(prv[A[i]]!=-1){ for(int j=0;j<=sz[prv[A[i]]];j++){ auto x=have[prv[A[i]]][j]; if(x==B[i])h=1; else have[id][++cur]=x; } } if(h==0)have[id][++cur]=B[i]; sz[id]=cur; prv[A[i]]=id; ids[A[i]].push_back(id); h=0,id=i*2+1,cur=-1; if(prv[B[i]]!=-1){ for(int j=0;j<=sz[prv[B[i]]];j++){ auto x=have[prv[B[i]]][j]; if(x==A[i])h=1; else have[id][++cur]=x; } } if(h==0)have[id][++cur]=A[i]; sz[id]=cur; prv[B[i]]=id; ids[B[i]].push_back(id); } } int fans(vector<int>&l,vector<int>&r){ int ll=-1,rr=-1; int ans=inf; if(l.size()==0||r.size()==0)return inf; while(1){ if(ll==l.size()-1&&rr==r.size()-1)break; if(rr==r.size()-1)while(ll+1<l.size())ans=min(ans,abs(l[ll+1]-r[rr])),ll++; if(ll==l.size()-1)while(rr+1<r.size())ans=min(ans,abs(r[rr+1]-l[ll])),rr++; if(ll==l.size()-1&&rr==r.size()-1)break; if(l[ll+1]<r[rr+1]){ if(rr>=0)ans=min(ans,abs(l[ll+1]-r[rr])); ll++; }else{ if(ll>=0)ans=min(ans,abs(r[rr+1]-l[ll])); rr++; } } return ans; } int question(int x, int y, int v) { if(v==0)return inf; int idl=lower_bound(ids[x].begin(),ids[x].end(),v*2)-ids[x].begin()-1; if(idl==-1)return inf; int idr=lower_bound(ids[y].begin(),ids[y].end(),v*2)-ids[y].begin()-1; if(idr==-1)return inf; idl=ids[x][idl]; idr=ids[y][idr]; vector<int>l,r; for(int i=0;i<=sz[idl];i++)l.push_back(have[idl][i]); for(int i=0;i<=sz[idr];i++)r.push_back(have[idr][i]); for(auto &x:l)x=h[x]; for(auto &x:r)x=h[x]; sort(l.begin(),l.end()); sort(r.begin(),r.end()); return fans(l,r); }
#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...