zoukankan      html  css  js  c++  java
  • Jzoj4891 摆书

    十分套路,一看应该就是LIS相关的题目了

    我们发现,操作只能将数字放在数列头,所以考虑一本书i,若有j使得j<i而且s[j]>s[i],那i肯定要被抽出来

    所以,答案应该是结尾为n的LIS长度,这个就搞一个rank数组就好了;

    找到最小的k使得对于i>=k都满足rank[i]>rank[i-1],那么k-1就是答案

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #define N 100010
    using namespace std;
    int s[N],r[N],n,T;
    int Extended_Ash(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i) scanf("%d",s+i),r[s[i]]=i;
    	for(int i=--n;i;--i) if(r[i+1]>r[i]) --n; else break;
    	printf("%d
    ",n);
    }
    int main(){
    	freopen("book.in","r",stdin);
    	freopen("book.out","w",stdout);
    	for(scanf("%d",&T);T--;Extended_Ash());
    }

  • 相关阅读:
    bootstrap 兼容 IE8
    在IE8的基础上安装IE11
    前台
    dll 库文件下载地址
    年轻
    linux 异常
    Navicat断网时连不上数据库
    jQuery
    破解版 Teamver 安装
    mysql
  • 原文地址:https://www.cnblogs.com/Extended-Ash/p/7774815.html
Copyright © 2011-2022 走看看