思路:
首先要知道:11+12+13+14+...++1n=ln(n)+C
然后就可以为所欲为【暴力吧!】
拿个优先队列什么的,或者直接num∗log∗(num) sort好像都行????
代码:
#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;
}
本文介绍了一种使用优先队列和排序算法解决特定问题的方法。通过不断将元素加入优先队列,并按一定规则取出,实现了高效的数据处理流程。此外,文章还展示了如何利用这些算法来优化程序性能。
713

被折叠的 条评论
为什么被折叠?



