Codeforces Round #746 (Div. 2)

Codeforces Round #746 (Div. 2)   B. Hemose Shopping

题意:给定 n 个数,你需要将其变成非递减序列。每次操作,你能够交换两个数它们需要满足下标之差的绝对值 ≥ k 。问是否能成功。

结论:下标 ≥ k 与下标 ≤ n-k 的数是能够任意交换的。显然可以让他们分别和 a或 a交换,然后balabala。

Codeforces Round #746 (Div. 2)
#include<bits/stdc++.h>
#define ll long long
#define ls u<<1
#define rs u<<1|1
#define mm(x) memset(x,0,sizeof(x))
#define debug(x) cout << #x << ":" << x << '\n'
using namespace std;
int read()
{
    int a=0;int f=0;char p=getchar();
    while(!isdigit(p)){f|=p=='-';p=getchar();}
    while(isdigit(p)){a=(a<<3)+(a<<1)+(p^48);p=getchar();}
    return f?-a:a;
}
const int INF=998244353;
int T;
int n,m;
bool flag;
int val[200050];
int t[200050]; 
int main()
{
    T=read();
    while(T--)
    {
        n=read();    m=read();    flag=true;
        for(int i=1;i<=n;++i)    val[i]=read();
        for(int i=1;i<=n;++i)    t[i]=val[i];
        sort(t+1,t+n+1);
        for(int i=n-m+1;i<=m;++i)
            if(val[i]!=t[i])    flag=false;
        if(flag)    puts("YES");
        else    puts("NO");
    }
    return 0;
}
View Code

 

 

上一篇:[LeetCode] 746. Min Cost Climbing Stairs


下一篇:【LeetCode】746. Min Cost Climbing Stairs 使用最小花费爬楼梯(Easy)(JAVA)每日一题