이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
// Aber der schlimmste Fiend, dem du begegnen kannst, wirst du immer dir selber sein
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2,fma,tune=native")
#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL);
#define ff first
#define ss second
#define pb push_back
#define rev reverse
#define all(x) x.begin(),x.end()
#define acc accumulate
#define sz size()
#define MOD 1000000007
#define rall(x) x.rbegin(),x.rend()
#define rep(i, x, n) for(int i = x; i < n; i++)
using namespace std;
const int N = 1e6 + 5;
inline void solve(){
int n, m, q;
cin >> n >> m >> q;
int ans[300005], ok[n+1];
fill(ok, ok+n+1, 0);
priority_queue<pair<int, int> > pq;
set<int> st;
for(int i = 1; i <= m; i++){
int x;
cin >> x;
ans[i] = x;
st.insert(x);
}
int l = 1;
map<int, int> mp;
for(int i : st){
while(mp[l]) l++;
pq.push({i-l, l*-1});
l = i;
mp[i] = 1;
}
l++;
if(l < n) pq.push({n-l+1, l*-1});
int qq[q];
for(int i = 0; i < q; i++){
cin >> qq[i];
}
for(int i = m+1; i <= min(n, 300005); i++){
int len = pq.top().ff, in = pq.top().ss*-1;
pq.pop();
int mid = in + (len-1) / 2;
if(in != mid){
pq.push({mid - in, in*-1});
}
if(len != 1){
pq.push({in + len - 1 - mid, (mid+1)*-1});
}
ans[i] = mid;
}
for(int i = 0; i < q; i++){
cout << ans[qq[i]] << endl;
}
}
int main(){
fast_io
int t;
t = 1;
while(t--) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |