zoukankan      html  css  js  c++  java
  • K-Stack(2021牛客暑期多校2)

    题目传送门

    分析:bi就是已知加入ai以后以ai结尾的LIS。

    先贪心地把它给的不完整的信息弄完整:
    因为不合法的情况是这次的栈的容量减上次的>1个,那么这个位置就填入pos【i-1】+1,减少不合法的可能性。
    再考虑原序列,因为是递增的构造法,那么在容量最大的位置填入最大的数,然后如果bi,bj相同(i<j),ai一定大于aj,不然bj=bi+1。

    code:

    #include<bits/stdc++.h>
    #define N 1000007
    
    using namespace std;
    
    int val[N],L[N],R[N],pos[N],ans[N];
    vector<int>v[N];
    int main(){
        int n,k;
        cin>>n>>k;
        for(int i=1;i<=k;i++){
            int p,x;
            scanf("%d%d",&p,&x);
            pos[p]=x;
        }
        for(int i=1;i<=n;i++){
            if(pos[i]){
                if(pos[i]-pos[i-1]>1){
                    cout<<-1;
                    return 0;
                }
            }
            else pos[i]=pos[i-1]+1;
            v[pos[i]].push_back(i);
        }
        int as=n;
        for(int i=n;i;i--){
            int sz=v[i].size();
            for(int j=0;j<sz;j++){
                ans[v[i][j]]=as--;
            }
        }
        for(int i=1;i<=n;i++)printf("%d ",ans[i]);
        return 0;
    }
    
  • 相关阅读:
    手机体验细节小动画
    第一次用AngularJS
    鼠标离开方向检测
    回忆之placeholder
    回忆之日历
    大数据学习
    shell 二
    十三:变量、函数、存储过程、循环控制结构
    十二:事务与视图
    十一:约束
  • 原文地址:https://www.cnblogs.com/GUOGaby/p/15036966.html
Copyright © 2011-2022 走看看