제출 #846384

#제출 시각아이디문제언어결과실행 시간메모리
846384vjudge1OGLEDALA (COI15_ogledala)C++17
19 / 100
62 ms524288 KiB
#include<bits/stdc++.h>
using namespace std;

using ll = long long;
using ld = long double;
#define pb push_back
#define endl '\n'
#define fi first
#define se second
#define fio ios_base::sync_with_stdio(false);cin.tie(NULL);
#define CDIV(a,b) (((a)+(b)-(1))/(b))
const ll inf = 1e17 + 5;
const ll mod = 1e9 + 7;
const ll N = 3e5 + 30;

 
int mod_(int a, int b)
{
    if(a >= 0)return a % b;
    a += (-a/b + 1) * b;
    return a % b;
}


void solve()
{
    int m, n, q;
    cin >> m >> n >> q;
    int last = 1;
    set<array<int, 3> >s;
    vector<int>ans(m + 1);
    for(int i = 0; i < n; ++i)
    {
        int r;
        cin >> r;
        s.insert({-(r - last), last, r - 1});
        last = r + 1;
        ans[i + 1] = r;
    }
    if(last <= m)s.insert({-(m - last + 1),last, m});
    for(int i = n + 1; i <= m; ++i)
    {
        //cout << i << ' ';
        array<int, 3> a = *s.begin();
        a[0] = -a[0];
        //for(int j : a)cout << j << ' ';
        s.erase(s.begin());
        ans[i] = (a[2] + a[1])/2;
        //cout << " ans : " << ans[i] << endl;
        if(a[0] > 2)
        {
            s.insert({-(ans[i] - a[1]), a[1], ans[i] - 1});
            s.insert({-(a[2] - ans[i]), ans[i] + 1, a[2]});
        }
        else if(a[0] == 2)
        {
            s.insert({-(a[2] - ans[i]), ans[i] + 1, a[2]});
        }
    }
    while(q--)
    {
        int idx;
        cin >> idx;
        cout << ans[idx] << endl;
    }
    
}

int main()
{
    fio;
    //nt t; cin >> t; while(t--)
    {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...