Submission #1198935

#TimeUsernameProblemLanguageResultExecution timeMemory
1198935hengliaoFun Tour (APIO20_fun)C++20
21 / 100
70 ms32956 KiB
#include "fun.h" #include<bits/stdc++.h> using namespace std; #define F first #define S second #define pb push_back #define vll vector<ll> #define pll pair<ll, ll> typedef long long ll; namespace{ const int mxN=1e5+5; const int LOG=20; vector<pair<int, int>> v[mxN][2]; bool done[mxN]; int d[mxN]; } vector<int> createFunTour(int n, int q) { memset(done, 0, sizeof(done)); for(int i=1;i<=n;i++){ d[i]=0; int tar=i; tar/=2; while(tar>0){ d[i]++; tar/=2; } } for(int i=1;i<=n;i++){ int tar=i/2; int pre=i; while(tar>0){ if(pre==2*tar){ v[tar][0].pb({d[i]-d[tar], i}); } else{ v[tar][1].pb({d[i]-d[tar], i}); } pre=tar; tar/=2; } } int mx=0, idx=0; for(int i=1;i<=n;i++){ if(d[i]>mx){ mx=d[i]; idx=i; } } int cur=idx; vector<int> ans(n); auto f=[&](int it){ int tar=it/2; int pre=it; mx=-1, idx=-1; for(int i=0;i<2;i++){ while(!v[it][i].empty() && done[v[it][i].back().S]){ v[it][i].pop_back(); } if(!v[it][i].empty()){ if(v[it][i].back().F>mx){ mx=v[it][i].back().F; idx=v[it][i].back().S; } } } while(tar>0){ if(d[it]-d[tar]>mx){ mx=d[it]-d[tar]; idx=tar; } if(pre==2*tar){ while(!v[tar][1].empty() && done[v[tar][1].back().S]){ v[tar][1].pop_back(); } if(!v[tar][1].empty()){ if(d[it]-d[tar]+v[tar][1].back().F>mx){ mx=d[it]-d[tar]+v[tar][1].back().F; idx=v[tar][1].back().S; } } } else{ while(!v[tar][0].empty() && done[v[tar][0].back().S]){ v[tar][0].pop_back(); } if(!v[tar][0].empty()){ if(d[it]-d[tar]+v[tar][0].back().F>mx){ mx=d[it]-d[tar]+v[tar][0].back().F; idx=v[tar][0].back().S; } } } pre=tar; tar/=2; } return idx; }; for(int rep=0;rep<n;rep++){ ans[rep]=cur-1; done[cur]=1; cur=f(cur); } // for(auto &it:ans){ // cout<<it<<' '; // } // cout<<'\n'; return ans; }
#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...