题目1533:最长上升子序列

http://ac.jobdu.com/problem.php?pid=1533

时间限制:1 秒

内存限制:128 兆

特殊判题:

提交:857

解决:178

题目描述:

给定一个整型数组, 求这个数组的最长严格递增子序列的长度。 譬如序列1 2 2 4 3 的最长严格递增子序列为1,2,4或1,2,3.他们的长度为3。

输入:

输入可能包含多个测试案例。
对于每个测试案例,输入的第一行为一个整数n(1<=n<=100000):代表将要输入的序列长度
输入的第二行包括n个整数,代表这个数组中的数字。整数均在int范围内。

输出:

对于每个测试案例,输出其最长严格递增子序列长度。

样例输入:
  1. 4
  2. 4 2 1 3
  3. 5
  4. 1 1 1 1 1
样例输出:
  1. 2
  2. 1
  3.  
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<vector>
  5.  
  6. using namespace std;
  7.  
  8. const int N=;
  9.  
  10. int n,val[N];
  11. vector<int> vt;
  12.  
  13. int binarySearch(int x){
  14. int left=,right=vt.size()-;
  15. int mid;
  16. while(left<=right){
  17. mid=(left+right)>>;
  18. if(vt[mid]<x)
  19. left=mid+;
  20. else
  21. right=mid-;
  22. }
  23. return left;
  24. }
  25.  
  26. int main(){
  27.  
  28. //freopen("input.txt","r",stdin);
  29.  
  30. while(~scanf("%d",&n)){
  31. vt.clear();
  32. for(int i=;i<n;i++)
  33. scanf("%d",&val[i]);
  34. int tmp;
  35. for(int i=;i<n;i++){
  36. tmp=binarySearch(val[i]);
  37. if(tmp>=(int)vt.size())
  38. vt.push_back(val[i]);
  39. else
  40. vt[tmp]=val[i];
  41. }
  42. int ans=vt.size();
  43. printf("%d\n",ans);
  44. }
  45. return ;
  46. }
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5.  
  6. using namespace std;
  7.  
  8. const int N=;
  9.  
  10. int n,val[N],a[N];
  11. int len,arr[N];
  12.  
  13. int lowbit(int x){
  14. return x&(-x);
  15. }
  16.  
  17. void update(int i,int x){
  18. while(x<=len){
  19. if(i>arr[x])
  20. arr[x]=i;
  21. x+=lowbit(x);
  22. }
  23. }
  24.  
  25. int query(int x){
  26. int ans=;
  27. while(x){
  28. if(arr[x]>ans)
  29. ans=arr[x];
  30. x-=lowbit(x);
  31. }
  32. return ans;
  33. }
  34.  
  35. int main(){
  36.  
  37. freopen("input.txt","r",stdin);
  38.  
  39. while(~scanf("%d",&n)){
  40. for(int i=;i<n;i++){
  41. scanf("%d",&val[i]);
  42. a[i]=val[i];
  43. }
  44. sort(a,a+n);
  45. len=unique(a,a+n)-a;
  46. memset(arr,,sizeof(arr));
  47. int ans=,tmp;
  48. for(int i=;i<n;i++){
  49. val[i]=lower_bound(a,a+len,val[i])-a+;
  50. tmp=query(val[i]-)+;
  51. if(tmp>ans)
  52. ans=tmp;
  53. update(tmp,val[i]);
  54. }
  55. printf("%d\n",ans);
  56. }
  57. return ;
  58. }
  1.  

题目1533:最长上升子序列 (nlogn | 树状数组)的更多相关文章

  1. [poj 1533]最长上升子序列nlogn树状数组

    题目链接:http://poj.org/problem?id=2533 其实这个题的数据范围n^2都可以过,只是为了练习一下nlogn的写法. 最长上升子序列的nlogn写法有两种,一种是变形的dp, ...

  2. 【BZOJ】3173: [Tjoi2013]最长上升子序列(树状数组)

    [题意]给定ai,将1~n从小到大插入到第ai个数字之后,求每次插入后的LIS长度. [算法]树状数组||平衡树 [题解] 这是树状数组的一个用法:O(n log n)寻找前缀和为k的最小位置.(当数 ...

  3. [bzoj2124]等差子序列(hash+树状数组)

    我又来更博啦     2124: 等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 941  Solved: 348[Submit][Statu ...

  4. BZOJ2124 等差子序列(树状数组+哈希)

    容易想到一种暴力的做法:枚举中间的位置,设该位置权值为x,如果其两边存在权值关于x对称即合法. 问题是如何快速寻找这个东西是否存在.考虑仅将该位置左边出现的权值标1.那么若在值域上若关于x对称的两权值 ...

  5. BZOJ5157 [Tjoi2014]上升子序列 【树状数组】

    题目链接 BZOJ5157 题解 我们只需计算每个位置为开头产生的贡献大小,就相当于之后每个大于当前位置的位置产生的贡献 + 1之和 离散化后用树状数组维护即可 要注意去重,后面计算的包含之前的,记录 ...

  6. bzoj2124 等差子序列(树状数组+hash)

    题意 给你一个1~n排列,问有没有一个等差数列(长度至少为3) 题解 我居然自己想到了正解. 但我最后写挂了,所以我又看了题解. 我们维护了一个以权值为下标的01序列. 我们扫描整个序列.对于每一个正 ...

  7. BZOJ2124: 等差子序列(树状数组&hash -> bitset 求是否存在长度为3的等差数列)

    2124: 等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 2354  Solved: 826[Submit][Status][Discuss ...

  8. bzoj 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛【dp+树状数组+hash】

    最长上升子序列.虽然数据可以直接n方但是另写了个nlogn的 转移:f[i]=max(f[j]+1)(a[j]<a[i]) O(n^2) #include<iostream> #in ...

  9. Ultra-QuickSort---poj2299 (归并排序.逆序数.树状数组.离散化)

    题目链接:http://poj.org/problem?id=2299 题意就是求把数组按从小到大的顺序排列,每次只能交换相邻的两个数, 求至少交换了几次 就是求逆序数 #include<std ...

随机推荐

  1. tesseract api C++使用例子

    转自:https://code.google.com/p/tesseract-ocr/wiki/APIExample APIExample API examples Updated Aug 12, 2 ...

  2. 利用Access-Control-Allow-Origin响应头解决跨域请求

    //允许任何域名访问 header("Access-Control-Allow-Origin: *"); //指定域名允许跨域 header("Access-Contro ...

  3. document.write()

    以前一直以为document.write()就一定会清空文档里面的所有内容,一直没有去尝试,最近才知道原来是要在特定的情况下document.write才会清空文档里面所有内容的,在这里,觉得应该告诉 ...

  4. QT--以共享的方式发布应用,QT依赖库

    Building Qt as a Shared Library 因为:QT基本上都是采用动态编译的(被安装的OS中的),(如安装包往往都是默认动态编译处理好的动态库),所以我们采用动态连接的方式进行发 ...

  5. LAMP安全设置

    1.设置MySQL密码,删除多余root账号 [root@localhost ~]# mysql -uroot -p mysql>set password=password("111& ...

  6. python 处理中文文件时的编码问题,尤其是utf-8和gbk

    python代码文件的编码 py文件默认是ASCII编码,中文在显示时会做一个ASCII到系统默认编码的转换,这时就会出错:SyntaxError: Non-ASCII character.需要在代码 ...

  7. 《Automatic Face Classification of Cushing’s Syndrome in Women – A Novel Screening Approach》学习笔记

    <针对女性库欣综合征患者的自动面部分类-一种新颖的筛查方法> Abstract 目的:库兴氏综合征对身体造成相当大的伤害如果不及时治疗,还经常是诊断的时间太长.在这项研究中,我们旨在测试面 ...

  8. poj 1325 Machine Schedule

    Time Limit: 1000 MS Memory Limit: 10000 KB 64-bit integer IO format: %I64d , %I64u   Java class name ...

  9. java 继承多态的一些理解不和不理解

    1.向上转型的一个误区 一直以为Child 继承Parent以后, Parent p = new Child();  p可以调用Child类中拓展Parent的方法,原来必须在强制转换成Child类才 ...

  10. Google被墙 Android开发工具下载地址

    Android开发环境的官网下载地址 可以直接下载 (1)Adt Bundle Platform Package Size MD5 Checksum Windows 32-bit adt-bundle ...