第15屆上海大學程式設計聯賽夏季賽暨上海高校金馬五校賽H
阿新 • • 發佈:2019-02-06
思路:
首先要知道:
然後就可以為所欲為【暴力吧!】
拿個優先佇列什麼的,或者直接
程式碼:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e4 + 10;
int n, m, a[N];
priority_queue<int>que;
vector<int>xs[N];
void solve(int pos, int k){
for (int i=0;i<n;i+=k)
que.push(a[i]);
while(!que.empty()){
int x = que.top();
xs[pos].push_back(x);
que.pop();
}
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n, &m);
while(!que.empty()) que.pop();
for (int i=0;i<n;i++){
scanf("%d", &a[i]);
xs[i].clear();
}
for(int i=0, k = 1;i < n; i++, k++)
solve(i, k);
int K, S;
while(m--){
scanf("%d%d", &K, &S);
if(K>n)
puts("-1");
else {
int Size = xs[K - 1].size();
if(Size < S) puts("-1");
else{
printf("%d\n",xs[K-1][S-1]);
}
}
}
}
return 0;
}