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());
    }

  • 相关阅读:
    BSGS
    聪聪可可(未完成)
    强连通分量,缩点
    bozj 1823(未完成)
    网络流
    bzoj1026
    点分治 poj1741
    bzoj 3270 博物馆
    高斯消元 模板
    bzoj 3143 [Hnoi2013]游走
  • 原文地址:https://www.cnblogs.com/Extended-Ash/p/7774815.html
Copyright © 2011-2022 走看看