Submission #1289832

#TimeUsernameProblemLanguageResultExecution timeMemory
1289832enzyICC (CEOI16_icc)C++20
0 / 100
5 ms580 KiB
#include<bits/stdc++.h> #include"icc.h" using namespace std; const int maxn=110; const int maxk=7; vector<int>v[maxn]; int pai[maxn]; int rep(int a){ if(pai[a]==a) return a; return pai[a]=rep(pai[a]); } int faz_query(int x, int y, vector<int>a, vector<int>b){ int A[x], B[y]; for(int i=0;i<x;i++) A[i]=a[i]; for(int i=0;i<y;i++) B[i]=b[i]; return query(x,y,A,B); } int find(vector<int> a, vector<int> b){ int id=0; for(int k=0;k<maxk;k++){ vector<int>aux; for(int j=0;j<a.size();j++) if(j&(1<<k)) aux.push_back(a[j]); if(aux.size()&&faz_query(aux.size(),b.size(),aux,b)) id+=(1<<k); } return a[id]; } void merge(int u, int w){ for(int x : v[w]) v[u].push_back(x); v[w].clear(); pai[w]=u; } void run(int n){ for(int i=1;i<=n;i++){ v[i].push_back(i); pai[i]=i; } for(int i=1;i<n;i++){ vector<int>a, b; int at=__lg(n-i+1); for(int k=0;k<=at;k++){ a.clear(); b.clear(); for(int j=1;j<=n;j++){ if(j&(1<<k)) for(int x : v[j]) a.push_back(x); else for(int x : v[j]) b.push_back(x); } if(k==maxk-1) break; if(a.size()&&b.size()&&faz_query(a.size(),b.size(),a,b)) break; } int u=find(a,b), w=find(b,a); setRoad(u,w); u=rep(u); w=rep(w); if(u>w) swap(u,w); merge(u,w); for(int i=1;i<=n;i++) if(pai[i]==n-i+1) pai[i]=w; swap(v[w],v[n-i+1]); } }
#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...