Submission #1225249

#TimeUsernameProblemLanguageResultExecution timeMemory
1225249MarwenElarbiMinerals (JOI19_minerals)C++20
40 / 100
109 ms12736 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; //CODE vector<int> tab[43000*4]; vector<pair<int,int>> ans; set<int> st; set<int> st_; vector<int> lleft; vector<int> rright; int lst; void daq(int pos,int l,int r){ /*cout <<pos<<" "<<l<<" "<<r<<endl; for (int i = 0; i < tab[pos].size(); ++i) { cout << tab[pos][i]<<" "; }cout <<endl;*/ if(l>r) return; if(l==r){ //if(st_.count(l)) lst=Query(l); ans.push_back({lleft[l],tab[pos].back()}); return; } int mid=(r+l)/2; int i=r; while(i>mid){ lst=Query(lleft[i]); st_.erase(lleft[i]); i--; } if(st.count(tab[pos][0])){ for(auto u:tab[pos]){ int a=Query(u); //cout << "hey"<< " "<<" "<<u<<" "<<l<<" "<<r<<endl; st.erase(u); if (a<lst) tab[pos*2+2].push_back(u); else tab[pos*2+1].push_back(u); lst=a; } daq(pos*2+1,l,mid); while(i<=r){ lst=Query(lleft[i]); st_.insert(lleft[i]); i++; } daq(pos*2+2,mid+1,r); }else{ for(auto u:tab[pos]){ int a=Query(u); st.insert(u); //cout <<"hey"<<" "<<u<<" "<< a <<" "<<lst<<endl; if (a>lst) tab[pos*2+2].push_back(u); else tab[pos*2+1].push_back(u); lst=a; } daq(pos*2+1,l,mid); while(i<=r){ lst=Query(lleft[i]); st_.insert(lleft[i]); i++; } daq(pos*2+2,mid+1,r); } return; } void Solve(int N) { lleft.push_back(0); rright.push_back(0); lst=0; for (int i = 1; i <= 2*N; ++i) { int a=Query(i); if(a>lst) lleft.push_back(i); else rright.push_back(i); lst=a; } for (int i = 1; i <= N; ++i) { tab[0].push_back(rright[i]); st.insert(rright[i]); } daq(0,1,N); for (int i = 0; i < ans.size(); ++i) { Answer(ans[i].first,ans[i].second); } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...