Submission #1159383

#TimeUsernameProblemLanguageResultExecution timeMemory
1159383gazizmadi11The Potion of Great Power (CEOI20_potion)C++20
31 / 100
283 ms61604 KiB
//gm --- akezhon #include <bits/stdc++.h> // #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3") // #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #define pb push_back #define pf push_front #define F first #define S second #define all(v) v.begin(),v.end() #define pii pair<int,int> #define tm (tl+tr)/2 #define TL v+v, tl, tm #define TR v+v+1, tm+1, tr #define DA l <= tl && tr <= r #define NE r < tl || tr < l #define double long double // #define int long long using namespace std; const int N=2e5+7; // const int mod=998244353; // const int inf=2e12; int n, d, m; int a[N], b[N], h[N]; set<int>st[N]; vector<int>vec[N]; vector<int>add[N][2], del[N][2]; void init(int N, int D, int H[]){ n=N; d=D; for(int i=0; i < n; i++)h[i]=H[i]; } void curseChanges(int U, int A[], int B[]){ m=U; for(int i=0; i < m; i++)a[i]=A[i]; for(int i=0; i < m; i++)b[i]=B[i]; } bool did_go; void go(bool ok=0){ if(did_go)return; did_go=1; for(int i=0; i < m; i++){ if(st[a[i]].find(b[i]) != st[a[i]].end()){ st[a[i]].erase(b[i]); st[b[i]].erase(a[i]); if(1 < h[a[i]] || 1 < h[b[i]])continue; del[a[i]][h[b[i]]].pb(i); del[b[i]][h[a[i]]].pb(i); } else{ st[a[i]].insert(b[i]); st[b[i]].insert(a[i]); if(1 < h[a[i]] || 1 < h[b[i]])continue; add[a[i]][h[b[i]]].pb(i); add[b[i]][h[a[i]]].pb(i); } } if(ok)return; for(int i=0; i < n; i++){ for(int j : st[i])vec[i].pb(h[j]); sort(all(vec[i])); } } int mn(vector<int> &v1,vector<int> &v2){ int cur=0, mnn=1e9; if(v1.size()==0||v2.size()==0){ return mnn; } for(int i : v1){ while(v2[cur] < i && cur < v2.size()-1)cur++; mnn=min(mnn, abs(i-v2[cur])); if(cur)mnn=min(mnn, abs(i-v2[cur-1])); } return mnn; } bool les(int x, int V, bool f){ int ad = lower_bound(all(add[x][f]), V)-add[x][f].begin(); int de = lower_bound(all(del[x][f]), V)-del[x][f].begin(); return (ad>de); } int question(int X, int Y, int V){ int x=X, y=Y; if(V==m){ go(); return mn(vec[x], vec[y]); } if(m <= 1000){ vector<int>vx, vy; set<int>st1, st2; for(int i=0; i < V; i++){ if(a[i]==x){ if(st1.find(b[i])==st1.end())st1.insert(b[i]); else st1.erase(b[i]); } if(a[i]==y){ if(st2.find(b[i])==st2.end())st2.insert(b[i]); else st2.erase(b[i]); } if(b[i]==x){ if(st1.find(a[i])==st1.end())st1.insert(a[i]); else st1.erase(a[i]); } if(b[i]==y){ if(st2.find(a[i])==st2.end())st2.insert(a[i]); else st2.erase(a[i]); } } for(int i : st1)vx.pb(h[i]); for(int i : st2)vy.pb(h[i]); sort(all(vx)); sort(all(vy)); return mn(vx, vy); } go(1); bool x0=0, x1=0, y0=0, y1=0; if(les(x, V, 0))x0=1; if(les(x, V, 1))x1=1; if(les(y, V, 0))y0=1; if(les(y, V, 1))y1=1; return 1; if(x1&&y1||x0&&y0)return 0; if(!x0&&!x1||!y0&&!y1)return 1e9; return 1; } // void AlemAmenov(){ // } // signed main(){ // ios_base::sync_with_stdio(0); // cin.tie(0); // int RealName=1; // cin >> RealName; // freopen("newbarn.in", "r", stdin); // freopen("newbarn.out", "w", stdout); // while(RealName--){ // AlemAmenov(); // } // 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...
#Verdict Execution timeMemoryGrader output
Fetching results...