hdoj 6235 Permutation

来源:互联网 发布:helloworld的java程序 编辑:程序博客网 时间:2024/06/05 08:00

题目链接: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;}
原创粉丝点击