Submission #578482

#TimeUsernameProblemLanguageResultExecution timeMemory
578482amunduzbaevThe Potion of Great Power (CEOI20_potion)C++17
100 / 100
2945 ms92420 KiB
#include "bits/stdc++.h" using namespace std; #ifndef EVAL #include "grader.cpp" #endif #define ar array const int N = 1e5 + 5; const int C = 50; vector<ar<int, 2>> edges[N]; vector<set<ar<int, 2>>> vals[N]; int h[N], n; void init(int N, int D, int H[]) { n = N; for(int i=0;i<N;i++){ h[i] = H[i]; } } void curseChanges(int U, int A[], int B[]) { for(int i=0;i<U;i++){ edges[A[i]].push_back({i + 1, B[i]}); edges[B[i]].push_back({i + 1, A[i]}); } for(int i=0;i<n;i++){ set<ar<int, 2>> ss; for(int j=0;j<(int)edges[i].size();j++){ if(j % C == 0){ vals[i].push_back(ss); } if(ss.count({h[edges[i][j][1]], edges[i][j][1]})){ ss.erase({h[edges[i][j][1]], edges[i][j][1]}); } else { ss.insert({h[edges[i][j][1]], edges[i][j][1]}); } } } } void get(int a, int t, set<ar<int, 2>>& res){ int j = lower_bound(edges[a].begin(), edges[a].end(), (ar<int, 2>){t + 1, -1}) - edges[a].begin(); if(!j) return; j--; res = vals[a][j/C]; for(int k=(j/C) * C;k<(int)edges[a].size() && edges[a][k][0]<=t;k++){ if(res.count({h[edges[a][k][1]], edges[a][k][1]})){ res.erase({h[edges[a][k][1]], edges[a][k][1]}); } else { res.insert({h[edges[a][k][1]], edges[a][k][1]}); } } //~ for(auto x : res) cout<<x[0]<<" "; //~ cout<<"\n"; return; } set<ar<int, 2>> a, b; int question(int x, int y, int v) { a.clear(), b.clear(); get(x, v, a), get(y, v, b); auto lx = a.begin(), rx = b.begin(); int last = -1e9, f = -1, res = 1e9; while(lx != a.end() || rx != b.end()){ if(f == 0 && rx != b.end()) res = min(res, (*rx)[0] - last); if(f == 1 && lx != a.end()) res = min(res, (*lx)[0] - last); if(lx != a.end() && rx != b.end()){ if(*lx <= *rx) last = (*lx)[0], f = 0, lx++; else last = (*rx)[0], f = 1, rx++; } else break; } return res; } /* 6 5 11 4 2 42 1000 54 68 234 0 1 2 0 3 4 3 5 3 5 1 3 5 3 0 5 3 0 1 3 3 5 0 3 4 26 3 0 8 0 0 5 5 1000000000 3 0 11 14 */
#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...