Submission #1198841

#TimeUsernameProblemLanguageResultExecution timeMemory
1198841ElayV13Abracadabra (CEOI22_abracadabra)C++20
10 / 100
3095 ms400084 KiB
#include <bits/stdc++.h>
using namespace std;

vector < int > shuffle(vector < int > v)
{
        int sz = v.size();
        vector < int > f , s;
        for(int i = sz / 2 - 1;i >= 0;i--)
        {
                f.push_back(v[i]);
        }
        for(int i = v.size() - 1;i >= sz / 2;i--)
        {
                s.push_back(v[i]);
        }
        vector < int > res;
        while(res.size() < v.size())
        {
                if(!f.size())
                {
                        res.push_back(s[s.size() - 1]);
                        s.pop_back();
                }
                else if(!s.size())
                {
                        res.push_back(f[f.size() - 1]);
                        f.pop_back();
                }
                else
                {
                        if(f[f.size() - 1] > s[s.size() - 1])
                        {
                                res.push_back(s[s.size() - 1]);
                                s.pop_back();
                        }
                        else
                        {
                                res.push_back(f[f.size() - 1]);
                                f.pop_back();
                        }
                }
        }
        return res;
}

const int N = 1001;
const int ADD = 100001;

int res[N + ADD][N];

signed main()
{
      ios_base::sync_with_stdio(0);cin.tie(0);
      int n , q;
      cin >> n >> q;
      vector < int > a(n);
      for(int &i : a) cin >> i;
      for(int i = 0;i < n;i++) res[0][i] = a[i];
      vector < int > last = a;
      int mx = -1;
      for(int i = 1;i <= n + ADD - 1;i++)
      {
              mx = max(mx , i);
              a = shuffle(a);
              for(int j = 0;j < n;j++) res[i][j] = a[j];
              if(a == last) break;
      }
      while(q--)
      {
              int t , idx;
              cin >> t >> idx;
              t = min(t , mx);
              cout << res[t][idx - 1] << endl;
      }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...