Submission #1160246

#TimeUsernameProblemLanguageResultExecution timeMemory
1160246dibamboo23The Potion of Great Power (CEOI20_potion)C++20
0 / 100
439 ms71460 KiB
#include <bits/stdc++.h> using namespace std; #define sz size() #define S second #define F first const int N=(int)2e5+3; int h[N]; int n; void init(int N, int D, int H[]) { for(int i=0;i<N;i++)h[i]=H[i]; } vector<pair<int,int>>t[N*4]; void upd(int l,int r,pair<int,int>x,int v=1,int tl=1,int tr=n){ if(tl>=l&&tr<=r){ t[v].push_back(x); t[v].push_back({x.S,x.F}); return; } if(tl>r||l>tr)return; int md=(tl+tr)>>1; upd(l,r,x,v+v,tl,md); upd(l,r,x,v+v+1,md+1,tr); } void sort_tree(int v=1,int tl=1,int tr=n){ sort(t[v].begin(),t[v].end()); if(tl==tr)return; int md=(tl+tr)>>1; sort_tree(v+v,tl,md); sort_tree(v+v+1,md+1,tr); } set<pair<pair<int,int>,int>>st; void curseChanges(int U, int A[], int B[]) { n=U; for(int i=0;i<n;i++){ if(A[i]>B[i])swap(A[i],B[i]); auto it=st.lower_bound({{A[i],B[i]},-1}); if(it==st.end()||it->F.F!=A[i]||it->F.S!=B[i]){ st.insert({{A[i],B[i]},i}); } else{ int l=it->S+1,r=i+1; st.erase(it); upd(l,r-1,{A[i],B[i]}); } } for(auto [to,pos]:st)upd(pos+1,n,to); sort_tree(); } int needA,needB; vector<int>nowA,nowB; void get(int pos,int v=1,int tl=1,int tr=n){ int j=lower_bound(t[v].begin(),t[v].end(),make_pair(needA,-1))-t[v].begin(); for(;j<(int)t[v].sz;j++){ if(t[v][j].F!=needA)break; nowA.push_back(h[t[v][j].S]); } j=lower_bound(t[v].begin(),t[v].end(),make_pair(needB,-1))-t[v].begin(); for(;j<(int)t[v].sz;j++){ if(t[v][j].F!=needB)break; nowB.push_back(h[t[v][j].S]); } if(tl==tr)return; int md=(tl+tr)>>1; if(pos<=md)get(pos,v+v,tl,md); else get(pos,v+v+1,md+1,tr); } int question(int x, int y, int v) { needA=x; needB=y; nowA.clear(); nowB.clear(); get(v); if(nowA.empty()||nowB.empty())return (int)1e9; sort(nowA.begin(),nowA.end()); sort(nowB.begin(),nowB.end()); int mn=(int)1e9; int j=0; for(auto to:nowA){ while(j<(int)nowA.sz-1&&nowB[j]<to)j++; mn=min(mn,abs(nowB[j]-to)); if(j>0)mn=min(mn,abs(nowB[j-1]-to)); } return mn; } // int main() { // int N, D, U, Q; // std::ios::sync_with_stdio(false); std::cin.tie(NULL); // std::cin >> N >> D >> U >> Q; // // int *F = new int[N]; // for (int i=0; i<N; i++) // std::cin >> F[i]; // init(N, D, F); // // int *A = new int[U], *B = new int[U]; // for (int i=0; i<U; i++) { // std::cin >> A[i] >> B[i]; // } // curseChanges(U, A, B); // // bool correct = true; // for (int i=0; i<Q; i++) { // int X,Y,V,CorrectAnswer; // std::cin >> X >> Y >> V >> CorrectAnswer; // int YourAnswer = question(X,Y,V); // if (YourAnswer != CorrectAnswer) { // std::cout << "WA! Question: " << i // << " (X=" << X << ", Y=" << Y << ", V=" << V << ") " // << "Your answer: " << YourAnswer // << " Correct Answer: " << CorrectAnswer << std::endl; // correct = false; // } else { // std::cerr << YourAnswer << " - OK" << std::endl; // } // } // // if (correct) { // std::cout << "Correct." << std::endl; // } else std::cout << "Incorrect." << std::endl; // 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...