Submission #638033

#TimeUsernameProblemLanguageResultExecution timeMemory
638033sofijavelkovskaAbracadabra (CEOI22_abracadabra)C++14
10 / 100
3071 ms31556 KiB
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n, q, shuffle, card, index, shuffles=0, t=0, i;
    cin >> n >> q;
    int a[n], answer[q]={0};
    tuple<int, int, int> queries[q];
    vector<int> left, right;
    for (i=0; i<n; i++)
        cin >> a[i];
    for (i=0; i<q; i++)
    {
        int shuffle, card;
        cin >> shuffle >> card;
        queries[i]={shuffle, card, i};

    }
    sort(queries, queries+q);
    while (true)
    {
        tie(shuffle, card, index)=queries[t];
        while (shuffle==shuffles)
        {
            answer[index]=a[card-1];
            t=t+1;
            if (t==q)
                break;
            tie(shuffle, card, index)=queries[t];
        }
        if (t==q)
            break;
        for (i=n/2-1; i>=0; i--)
            left.push_back(a[i]);
        for (i=n-1; i>=n/2; i--)
            right.push_back(a[i]);
        if (right[n/2-1]>*max_element(left.begin(), left.end()))
            break;
        i=0;
        while (!left.empty() && !right.empty())
        {
            if (left.back()<right.back())
            {
                a[i]=left.back();
                left.pop_back();
                i=i+1;
            }
            else
            {
                a[i]=right.back();
                right.pop_back();
                i=i+1;
            }
        }
        while (!left.empty())
        {
            a[i]=left.back();
            left.pop_back();
            i=i+1;
        }
        while (!right.empty())
        {
            a[i]=right.back();
            right.pop_back();
            i=i+1;
        }
        shuffles=shuffles+1;
    }
    while (t<q)
    {
        tie(shuffle, card, index)=queries[t];
        answer[index]=a[card-1];
        t=t+1;
    }
    for (i=0; i<q; i++)
        cout << answer[i] << endl;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...