제출 #846423

#제출 시각아이디문제언어결과실행 시간메모리
846423vjudge1OGLEDALA (COI15_ogledala)C++17
41 / 100
240 ms60756 KiB
#include <bits/stdc++.h> #define int long long int #define MP make_pair #define pb push_back #define REP(i,n) for(int (i) = 0; (i) < (n); (i)++) using namespace std; const double EPS = 0.00001; const int INF = 1e9+500; const int MOD = 1e9+7; const int N = 4e5+5; const int K = 1505; const int ALPH = 26; void fastio() { ios_base::sync_with_stdio(false); cin.tie(NULL); } int n,m,q; vector<int> a,b,res; set<array<int,2> > basin; void solve() { cin>>m>>n>>q; res.resize(N); a.resize(n+1); b.resize(q); for(int i = 1; i<=n; i++) { cin>>a[i]; } for(int i = 0; i<q; i++) { cin>>b[i]; } int last = 0; for(int i = 1; i<=n; i++) { res[i] = a[i]; int sz = a[i] - last - 1; basin.insert({sz, -(last + 1)}); last = a[i]; } int mx = b[q-1]; basin.insert({m - last, -(last + 1)}); for(int cur = n+1; cur <= mx; cur++) { auto itr = basin.end(); assert(basin.size() > 0); itr--; auto el = *itr; el[1] = -el[1]; int x = el[1] + ((el[0] - 1ll) / 2ll + 1ll) - 1ll; res[cur] = x; basin.erase(itr); if(x - el[1] > 0) { basin.insert({x - el[1], -(el[1])}); } if( el[1] + el[0] - (x+1ll) > 0ll) { basin.insert({el[1] + el[0] - (x+1ll), -(x+1ll)}); } } for(int i = 0; i<q; i++) { cout<<res[b[i]]<<"\n"; } } signed main() { //fastio(); int test = 1; //cin>>test; while(test--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...