Educational Codeforces Round 37 (Rated for Div. 2), problem: (C) Swap Adjacent Elements 【贪心】

题意

你有一个由n个整数组成的数组。从1到n的每个整数在此数组中只出现一次。
对于某些索引i(1≤i≤n - 1),可以将第i个元素与(i + 1)个交换,对于其他索引则不可能。您可以按任何顺序执行任意数量的交换操作。使用(i + 1)-th交换第i个元素的次数没有限制(如果不禁止该位置)。
你能否按升序对这个数组进行排序,执行一系列交换操作?

思路

正向遍历所有元素,判断当前最大值是否大于编号

code

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int maxn=2e5+5;
int a[maxn];
int n;
char s[maxn];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    cin>>(s+1);
    int mmax=-1;
    int ff=1;
    for(int i=1;i<n&&ff;i++){
        mmax=max(mmax,a[i]);
        if(s[i]=='0'&&mmax>i)
            ff=0;
    }
    if(ff) cout<<"YES"<<endl;
    else   cout<<"NO"<<endl;
    return 0;
}
学如逆水行舟,不进则退
发布了470 篇原创文章 · 获赞 1150 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/weixin_42429718/article/details/104147712