第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛H

来源:互联网 发布:淘宝视频可以放几分钟 编辑:程序博客网 时间:2024/06/08 18:53

思路:

首先要知道:11+12+13+14+...++1n=ln(n)+C
然后就可以为所欲为【暴力吧!】
拿个优先队列什么的,或者直接numlog(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;}
阅读全文
0 0
原创粉丝点击