Submission #1172722

#TimeUsernameProblemLanguageResultExecution timeMemory
1172722AlgorithmWarriorLibrary (JOI18_library)C++20
100 / 100
77 ms836 KiB
#include <bits/stdc++.h> #include "library.h" using namespace std; vector<int>ask(int id,int N,vector<deque<int>>& rasp){ vector<int>intrb(N,0); int i; for(i=0;i<=id;++i) for(auto elem : rasp[i]) intrb[elem-1]=1; return intrb; } void upgrade(int N,vector<deque<int>>& rasp,int nr){ vector<int>intrb=ask((int)rasp.size()-1,N,rasp); intrb[nr-1]=1; if(Query(intrb)==(int)rasp.size()+1) rasp.push_back({nr}); else if(Query(intrb)==(int)rasp.size()){ int st=-1,dr=(int)rasp.size()-1; /// (] while(dr-st>1){ int mij=(st+dr)/2; intrb=ask(mij,N,rasp); intrb[nr-1]=1; if(Query(intrb)==mij+1) dr=mij; else st=mij; } fill(intrb.begin(),intrb.end(),0); intrb[nr-1]=1; intrb[rasp[dr].front()-1]=1; if(Query(intrb)==1) rasp[dr].push_front(nr); else rasp[dr].push_back(nr); } else{ int st=-1,dr=(int)rasp.size()-1; while(dr-st>1){ int mij=(st+dr)/2; intrb=ask(mij,N,rasp); intrb[nr-1]=1; if(Query(intrb)<=mij+1) dr=mij; else st=mij; } int id1=dr; st=-1,dr=(int)rasp.size()-1; while(dr-st>1){ int mij=(st+dr)/2; intrb=ask(mij,N,rasp); intrb[nr-1]=1; if(Query(intrb)==mij) dr=mij; else st=mij; } int id2=dr; deque<int>deq1=rasp[id1]; deque<int>deq2=rasp[id2]; rasp[id1].clear(); rasp[id2].clear(); fill(intrb.begin(),intrb.end(),0); intrb[nr-1]=1; intrb[deq1.front()-1]=1; if(Query(intrb)==1){ deq1.push_front(nr); reverse(deq1.begin(),deq1.end()); } else deq1.push_back(nr); fill(intrb.begin(),intrb.end(),0); intrb[nr-1]=1; intrb[deq2.back()-1]=1; if(Query(intrb)==1) reverse(deq2.begin(),deq2.end()); while(!deq2.empty()){ deq1.push_back(deq2.front()); deq2.pop_front(); } rasp[id1]=deq1; vector<deque<int>>nou; for(auto dq : rasp) if(!dq.empty()) nou.push_back(dq); rasp=nou; } } void Solve(int N) { vector<deque<int>>rasp; int i; for(i=1;i<=N;++i) upgrade(N,rasp,i); vector<int>ans; for(auto elem : rasp[0]) ans.push_back(elem); Answer(ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...