题目1533:最长上升子序列 (nlogn | 树状数组)

时间:2023-01-01 21:52:10

题目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范围内。

输出:

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

样例输入:
4
4 2 1 3
5
1 1 1 1 1
样例输出:
2
1
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector> using namespace std; const int N=; int n,val[N];
vector<int> vt; int binarySearch(int x){
int left=,right=vt.size()-;
int mid;
while(left<=right){
mid=(left+right)>>;
if(vt[mid]<x)
left=mid+;
else
right=mid-;
}
return left;
} int main(){ //freopen("input.txt","r",stdin); while(~scanf("%d",&n)){
vt.clear();
for(int i=;i<n;i++)
scanf("%d",&val[i]);
int tmp;
for(int i=;i<n;i++){
tmp=binarySearch(val[i]);
if(tmp>=(int)vt.size())
vt.push_back(val[i]);
else
vt[tmp]=val[i];
}
int ans=vt.size();
printf("%d\n",ans);
}
return ;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; const int N=; int n,val[N],a[N];
int len,arr[N]; int lowbit(int x){
return x&(-x);
} void update(int i,int x){
while(x<=len){
if(i>arr[x])
arr[x]=i;
x+=lowbit(x);
}
} int query(int x){
int ans=;
while(x){
if(arr[x]>ans)
ans=arr[x];
x-=lowbit(x);
}
return ans;
} int main(){ freopen("input.txt","r",stdin); while(~scanf("%d",&n)){
for(int i=;i<n;i++){
scanf("%d",&val[i]);
a[i]=val[i];
}
sort(a,a+n);
len=unique(a,a+n)-a;
memset(arr,,sizeof(arr));
int ans=,tmp;
for(int i=;i<n;i++){
val[i]=lower_bound(a,a+len,val[i])-a+;
tmp=query(val[i]-)+;
if(tmp>ans)
ans=tmp;
update(tmp,val[i]);
}
printf("%d\n",ans);
}
return ;
}

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

  1. &lbrack;poj 1533&rsqb;最长上升子序列nlogn树状数组

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

  2. 【BZOJ】3173&colon; &lbrack;Tjoi2013&rsqb;最长上升子序列(树状数组)

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

  3. &lbrack;bzoj2124&rsqb;等差子序列&lpar;hash&plus;树状数组&rpar;

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

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

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

  5. BZOJ5157 &lbrack;Tjoi2014&rsqb;上升子序列 【树状数组】

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

  6. bzoj2124 等差子序列(树状数组&plus;hash)

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

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

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

  8. bzoj 1669&colon; &lbrack;Usaco2006 Oct&rsqb;Hungry Cows饥饿的奶牛【dp&plus;树状数组&plus;hash】

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

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

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

随机推荐

  1. 百度地图api调用

    <script type="text/javascript" src="http://api.map.baidu.com/api?key=&v=1.1&am ...

  2. Java--Semaphore控制并发线程数量

    package com; import java.util.concurrent.Semaphore; /** * Created by yangyu on 16/11/28. */ /** * Se ...

  3. BigInteger和BigDecimal的练习

    前言: BigInteger用于处理大数据的计算,它继承自java.math.BigInteger.用法相对来说比较简单,掌握几个基本运算即可. 初始化: BigInteger sum=new Big ...

  4. mpvue——引入echarts打包vendor过大

    前言 有一个项目需要引入图表,当时有两种选择一种是mpvue-echarts,一种是F2,而我经过踩坑之后依然决然的选择了mpvue-echarts,简单快捷容易上手,主要之前用过比较熟悉. 问题 | ...

  5. Nodejs运行错误小结

    (迁移自旧博客2017 04 15) 在使用过程中会遇到一些问题,学习过程中不定期更新. 问题一 错误如下 **events.js:72 throw er; // Unhandled 'error' ...

  6. 洛谷 P3899 &lbrack;谈笑风生&rsqb;

    简化题意 m次询问,每次询问x的子树中,与x节点距离不超过y的节点的子树和.n,m≤300,000. 思路 按照dfs序排序,每次将一个点的答案塞到第depu的位置,这样得到一个前缀和,每次询问作减法 ...

  7. 解决centos6&period;5不能识别NTFS格式的移动硬盘或U盘问题

    0.说明 从windows8拷了一些东西到移动硬盘,然后转到新安装的centos6.5系统上,但是插上移动硬盘的时候发现不能识别,无法正常挂载移动硬盘.到网上一搜,发现原来centos系统默认不识别N ...

  8. Qt Ubuntu 编译出错-1&colon; error&colon; 找不到 -lGL

    安装好,编译界面程序出错“-1: error: 找不到 -lGL” 在终端运行如下命令(安装Qt5.8.0) sudo apt-get install libqt5-dev sudo apt-get ...

  9. html网页什么样的字体最好看,css设置各种中文字体样式代码

    css代码如下:{ font-family:"Microsoft YaHei",微软雅黑,"MicrosoftJhengHei",华文细黑,STHeiti,Mi ...

  10. k8s device plugin

    基本概念入门: Device Manager Proposal Device plugin offical Doc(中文) device-plugins offical Doc(En) Go thro ...