zoukankan      html  css  js  c++  java
  • [CF1311B] WeirdSort

    Solution

    按照 (p[i]) 进行分段,如果某个 (k) 不存在 (p[i]=k),那么就把 (i,i+1) 分割开

    处理出每一段的左端点和右端点

    进而处理出每段的最小值和最大值

    如果存在第 (i) 段的最大值大于第 (i+1) 段的最小值,就输出 NO

    #include <bits/stdc++.h>
    using namespace std;
    
    #define reset(x) memset(x,0,sizeof x)
    
    const int N = 1005;
    int T,n,m,a[N],p[N],b[N],l[N],r[N],mx[N],mn[N];
    
    signed main() {
        cin>>T;
        while(T--) {
            reset(a); reset(p); reset(b);
            reset(r); reset(l);
            reset(mx); reset(mn);
            cin>>n>>m;
            for(int i=1;i<=n;i++) {
                cin>>a[i];
            }
            for(int i=1;i<=m;i++) {
                cin>>p[i];
                b[p[i]]=1;
            }
            int ind=1;
            l[1]=1;
            for(int i=1;i<=n;i++) {
                if(b[i]==0) r[ind]=i, l[++ind]=i+1;
            }
            --ind;
            for(int i=1;i<=ind;i++) {
                mx[i]=0; mn[i]=1e9;
                for(int j=l[i];j<=r[i];j++) {
                    mx[i]=max(mx[i],a[j]);
                    mn[i]=min(mn[i],a[j]);
                }
            }
            int flag=1;
            for(int i=1;i<ind;i++) {
                if(mx[i]>mn[i+1]) flag=0;
            }
            if(flag) puts("YES");
            else puts("NO");
        }
    }
    
  • 相关阅读:
    索引
    convert 时间转换
    SQL中的case when then else end用法
    SVN安装图解
    dos 命令
    阿里云服务器相关知识
    mvc知识应用
    MVC分页
    mvc系统过滤器
    .net 接口
  • 原文地址:https://www.cnblogs.com/mollnn/p/12372857.html
Copyright © 2011-2022 走看看