제출 #1294955

#제출 시각아이디문제언어결과실행 시간메모리
1294955Davdav1232The Potion of Great Power (CEOI20_potion)C++20
56 / 100
3091 ms93308 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAX_N=1e5+5; int H[MAX_N]; int N; int D; int d=50; vector<vector<pair<int, set<int>>>> changes(MAX_N, vector<pair<int, set<int>>> (1)); void init(int NN, int DD, int HH[]){ N=NN; D=DD; for(int i=0; i<N; i++) H[i]=HH[i]; for(int i=0; i<N; i++){ changes[i][0].first=0; changes[i][0].second.clear(); } } vector<vector<pair<int, int>>> upd(MAX_N); void curseChanges(int UU, int AA[], int BB[]){ for(int i=0; i<UU; i++){ upd[AA[i]].push_back({i+1, BB[i]}); upd[BB[i]].push_back({i+1, AA[i]}); } for(int i=0; i<N; i++){ for(int r=d; (int)upd[i].size()>=r; r+=d){ changes[i].push_back(changes[i][changes[i].size()-1]); changes[i][r/d].first=upd[i][r-1].first; for(int j=r-d; j<r; j++){ //add all updates int u=upd[i][j].second; if((changes[i][r/d].second).count(u)){ changes[i][r/d].second.erase(u); } else changes[i][r/d].second.insert(u); } } } } set<int> query(int p, int day){ int s=upd[p].size(); int r=0; //binary search here int a=0, b=changes[p].size()-1; if(changes[p][b].first<=day){ r=b; } else{ while(a+1<b){ int c=(a+b)/2; if(changes[p][c].first<=day){ a=c; } else b=c; } r=a; } set<int> ans=changes[p][r].second; for(int t=r*d; t<upd[p].size() && upd[p][t].first<=day; t++){ int u=upd[p][t].second; if(ans.count(u)){ ans.erase(u); } else ans.insert(u); } return ans; } int question(int x, int y, int v){ //find the sets set<int> ans1=query(x, v), ans2=query(y, v); if(ans1.size()==0 || ans2.size()==0) return 1e9; vector<ll> h1; vector<ll> h2; for(int r : ans1){ h1.push_back(H[r]); } for(int r : ans2){ h2.push_back(H[r]); } h2.push_back(-1e9); h2.push_back(2e9); sort(h1.begin(), h1.end()); sort(h2.begin(), h2.end()); ll m=1e9; for(int i=0, e=0; i<h1.size();){ if(h2[e+1]<h1[i]){ e++; continue; } m=min(m, h1[i]-h2[e]); m=min(m, h2[e+1]-h1[i]); i++; } return m; }
#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...