题目链接:Permutation
题目大意:要求你构造一个长度为n的1到n的排列使得 pi % pi+2 - pi == 0
题目思路:直接构造相间隔的相差1的数组就好了
#include <map>
#include <set>
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll maxn = 1e6+10;
ll a[maxn],b[maxn];
ll T,n,k,m;
bool check(ll mid){
ll ans = 0,num = 0;
ll l = 0,r = -1;
while(r < n){
if(num < k){
if(a[r+1] >= mid) num++;
r++;
}else{
if(num == k) ans += (n-r);
if(a[l] >= mid) num--;
l++;
if(ans >= m) return true;
}
}
return false;
}
int main(){
scanf("%lld",&T);
while(T--){
scanf("%lld%lld%lld",&n,&k,&m);
for(ll i = 0;i < n;i++){
scanf("%lld",&a[i]);
b[i] = a[i];
}
sort(b,b+n);
ll l = 0,r = n-1,mid,ans;
while(l <= r){
mid = (l+r)>>1;
if(check(b[mid])) ans = b[mid],l = mid+1;
else r = mid-1;
}
printf("%lld\n",ans);
}
return 0;
}