Submission #45173

#TimeUsernameProblemLanguageResultExecution timeMemory
45173ikura355Library (JOI18_library)C++14
19 / 100
1749 ms262144 KiB
#include "library.h" #include<bits/stdc++.h> using namespace std; const int maxn = 1e3 + 5; int n; vector<int> vec; int rec[maxn*4]; vector<int> way[maxn]; vector<int> ans; int ask(int l, int r, int x) { for(int i=l;i<=r;i++) vec[i-1] = 1; if(x) vec[x-1] = 1; int temp = Query(vec); for(int i=l;i<=r;i++) vec[i-1] = 0; if(x) vec[x-1] = 0; return temp; } void build(int pos, int l, int r) { if(l>r) return ; rec[pos] = ask(l,r,0); if(l==r) return ; int mid = (l+r)/2; build(pos<<1,l,mid); build(pos<<1|1,mid+1,r); } void addedge(int x, int pos, int l, int r) { if(l>r || x<=l) return ; // printf("ask [%d, %d] : %d = %d original = %d\n",l,r,x,ask(l,r,x),ask(l,r,0)); if(ask(l,r,x)>rec[pos]) return ; if(l==r) { // printf("%d <-> %d\n",l,x); way[x].push_back(l); way[l].push_back(x); return ; } int mid = (l+r)/2; addedge(x,pos<<1,l,mid); addedge(x,pos<<1|1,mid+1,r); } void dfs(int u, int last) { // printf("dfs %d\n",u,last); ans.push_back(u); for(auto v : way[u]) { if(v==last) continue; dfs(v, u); } } void Solve(int N) { if(N==1) { Answer({1}); return ; } n = N; for(int i=0;i<n;i++) vec.push_back(0); build(1,1,n); for(int x=1;x<=n;x++) addedge(x,1,1,n); for(int x=1;x<=n;x++) { if(way[x].size()==1) { dfs(x, 0); Answer(ans); return ; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...