제출 #415492

#제출 시각아이디문제언어결과실행 시간메모리
415492Bill_00Unscrambling a Messy Bug (IOI16_messy)C++14
100 / 100
5 ms2892 KiB
#include <vector> #include <bits/stdc++.h> #include "messy.h" using namespace std; int sz; string s=""; vector<int>v[100000]; void add(int l,int r){ if(l+1==r) return; int m=(l+r)>>1; for(int i=m+1;i<=r;i++){ s[i]='1'; } for(int i=l;i<=((l+m)>>1);i++){ s[i]='1'; add_element(s); // cout << s << '\n'; s[i]='0'; } for(int i=m+1;i<=r;i++){ s[i]='0'; } for(int i=l;i<=m;i++){ s[i]='1'; } for(int i=m+1;i<=((m+r)>>1);i++){ s[i]='1'; add_element(s); // cout << s << '\n'; s[i]='0'; } for(int i=l;i<=m;i++){ s[i]='0'; } add(l,m); add(m+1,r); } void solve(int id,int l,int r){ if(l+1==r) return; int m=(l+r)>>1; for(int i:v[id*2+1]){ s[i]='1'; } for(int i:v[id*2]){ s[i]='1'; if(check_element(s)){ v[id*4].push_back(i); } else v[id*4+1].push_back(i); s[i]='0'; } for(int i:v[id*2+1]) s[i]='0'; for(int i:v[id*2]) s[i]='1'; for(int i:v[id*2+1]){ s[i]='1'; if(check_element(s)){ v[id*4+2].push_back(i); } else v[id*4+3].push_back(i); s[i]='0'; } for(int i:v[id*2]) s[i]='0'; solve(id*2,l,m); solve(id*2+1,m+1,r); } vector<int> restore_permutation(int n, int w, int r){ sz=n; vector<int>ans(n); for(int i=0;i<n;i++) s+=('0'); for(int i=0;i<(n/2);i++){ s[i]='1'; add_element(s); s[i]='0'; } add(0,sz-1); compile_set(); for(int i=0;i<n;i++){ s[i]='1'; if(check_element(s)){ v[2].push_back(i); } else v[3].push_back(i); s[i]='0'; } solve(1,0,sz-1); for(int i=n;i<2*n;i++){ ans[v[i][0]]=i-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...