제출 #1308240

#제출 시각아이디문제언어결과실행 시간메모리
1308240vako_pMinerals (JOI19_minerals)C++20
80 / 100
53 ms8140 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define sd second const int mxN = 1e5 + 5; static ll n,last = 0; bool vis[mxN],vis1[mxN]; ll query(ll i){ ll res = Query(i); vis[i] = 1 - vis[i]; return res; } void Solve(int N){ n = N; vector<ll> v[2],l(2 * n + 5),r(2 * n + 5); vector<ll> vv(2 * n); iota(vv.begin(), vv.end(), 1); random_device rd; mt19937_64 gen(rd()); uniform_int_distribution<ll> dis(0, 2 * n - 1); for(int i = 0; i < 2 * n; i++) swap(vv[i], vv[dis(gen)]); for(auto i : vv){ ll res = query(i); if(res == last){ v[1].pb(i); l[i] = -1; r[i] = (ll)v[0].size() - 1; } else v[0].pb(i); last = res; } vector<vector<ll>> q(n + 5); for(auto i : v[1]){ ll mid = l[i] + (r[i] - l[i]) / 2; if(r[i] > l[i] + 1) q[mid].pb(i); else vis1[r[i]] = true; } ll op = 0,cnt = n; while(cnt){ if(op){ for(int j = 0; j < n; j++){ if(!vis1[j]) last = query(v[0][j]); for(auto i : q[j]){ ll res = query(i); if(res == last) r[i] = j; else l[i] = j; last = res; ll mid = l[i] + (r[i] - l[i]) / 2; if(r[i] > l[i] + 1) q[mid].pb(i); else vis1[r[i]] = true; } q[j].clear(); } } else{ for(int j = n - 1; j >= 0; j--){ for(auto i : q[j]){ ll res = query(i); if(res == last) r[i] = j; else l[i] = j; last = res; ll mid = l[i] + (r[i] - l[i]) / 2; if(r[i] > l[i] + 1) q[mid].pb(i); else vis1[r[i]] = true; } q[j].clear(); if(!vis1[j]) last = query(v[0][j]); } } op = 1 - op; cnt = 0; for(auto i : v[1]){ // cout << i << ' ' << l[i] << ' ' << r[i] << '\n'; if(r[i] > l[i] + 1){ cnt++; } } } for(auto i : v[1]) Answer(i, v[0][r[i]]); }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...