[ CodeVS冲杯之路 ] P3955

Posted Yo!Hadilo!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ CodeVS冲杯之路 ] P3955相关的知识,希望对你有一定的参考价值。

  不充钱,你怎么AC?

  题目:http://codevs.cn/problem/3955/

 

  最长上升子序列的加强版,n 有1000000,n 方的 DP 肯定会 TLE,那么用二分栈维护

  二分栈我讲不好啊,交给他吧

  http://www.cnblogs.com/Booble/archive/2010/11/27/1889482.html

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<iostream>
 6 #include<algorithm>
 7 using namespace std;
 8 
 9 const int N=1000001;
10 int a[N];
11 inline int find(int x,int l,int r)
12 {
13     if (l>=r) return l;
14     int mid=(l+r)>>1;
15     return a[mid]>=x?find(x,l,mid):find(x,mid+1,r);
16 }
17 int main()
18 {
19     int n,m=0,x;
20     scanf("%d",&n);
21     while (n--)
22     {
23         scanf("%d",&x);
24         a[x>a[m]?++m:find(x,1,m)]=x;
25     }
26     printf("%d\\n",m);
27     return 0;
28 }

 

以上是关于[ CodeVS冲杯之路 ] P3955的主要内容,如果未能解决你的问题,请参考以下文章

[ CodeVS冲杯之路 ] P3143

[ CodeVS冲杯之路 ] P1576

[ CodeVS冲杯之路 ] P1368

[ CodeVS冲杯之路 ] P1197

[ CodeVS冲杯之路 ] P2492

[ CodeVS冲杯之路 ] P1294