Submission #619106

#TimeUsernameProblemLanguageResultExecution timeMemory
619106errorgornMeetings (JOI19_meetings)C++17
100 / 100
643 ms1032 KiB
#include "meetings.h" #include <bits/stdc++.h> using namespace std; #define int long long #define ii pair<int,int> #define fi first #define se second #define puf push_front #define pof pop_front #define pub push_back #define pob pop_back #define lb lower_bound #define ub upper_bound #define rep(x,s,e) for (int x=(s)-((s)>(e));x!=(e)-((s)>(e));((s)<(e))?x++:x--) #define all(x) (x).begin(),(x).end() #define sz(x) (int) (x).size() mt19937 rng(chrono::system_clock::now().time_since_epoch().count()); int n; void dnc(int l,int r,vector<int> line,vector<int> &res){ if (line.empty()) return; int x=line[rng()%sz(line)]; vector<int> vl,vr; for (auto it:line) if (it!=x){ if (Query(l,x,it)==x) vr.pub(it); else vl.pub(it); } dnc(l,x,vl,res); res.pub(x); dnc(x,r,vr,res); } void solve(vector<int> idx){ if (sz(idx)==1) return; if (sz(idx)==2){ if (idx[0]>idx[1]) swap(idx[0],idx[1]); Bridge(idx[0],idx[1]); return; } int u,v; do{ u=idx[rng()%sz(idx)]; v=idx[rng()%sz(idx)]; } while (u==v); map<int,vector<int> > m; m[u]={u},m[v]={v}; for (auto it:idx) if (it!=u && it!=v){ m[Query(u,v,it)].pub(it); } vector<int> line; for (auto [a,b]:m) if (a!=u && a!=v) line.pub(a); vector<int> res={u}; dnc(u,v,line,res); res.pub(v); rep(x,0,sz(res)-1){ if (res[x]<res[x+1]) Bridge(res[x],res[x+1]); else Bridge(res[x+1],res[x]); } for (auto [a,b]:m) solve(b); } void Solve(signed N) { n=N; vector<int> idx; rep(x,0,n) idx.pub(x); solve(idx); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...