hdu_1025(LIS Nlog(N)算法)
题意:自己慢慢读吧。大概就是道路两边建路,给出建路需求,要求两条路不能有交叉,问最多可以建多少条路。
题解:一看数据范围500000,应该是dp,再画个图模拟一下,发现实质就是求最长上升子序列,很自然的数据要求nlogn算法
算法讲解在之前写过,这里直接贴过来:点我哦
坑:输出两个坑,一个是road和roads的区别,还有一个是案例之间有空行
code:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = ;
int q[N];
int stk[N];
int BSearch(int l,int r, int c)
{
while(l<=r){//注意这里应该是定于的时候还要再判断一次。
int m = (l+r)>>;
if(stk[m]==c) {
//printf("id = %d\n",m);
return m;
}
else if(stk[m]<c) l = m+;
else if(stk[m]>c) r = m-;
}
//printf("id = %d\n",l);
return l;
}
int main()
{
int n;
int c = ;
while(~scanf("%d",&n))
{
int cnt = ;
int t1,t2;
memset(stk,-,sizeof(stk));
for(int i = ; i < n; i++){
scanf("%d%d",&t1,&t2);
q[t1] = t2;
}
for(int i = ; i <= n; i++){
if(q[i]>stk[cnt-]){
stk[cnt++] = q[i];
}
else {
int id = BSearch(,cnt-,q[i]);
stk[id] = q[i];
}
}
cnt--;
if(cnt!=)
printf("Case %d:\nMy king, at most %d roads can be built.\n\n",c++,cnt);
else
printf("Case %d:\nMy king, at most %d road can be built.\n\n",c++,cnt);
}
return ;
}
hdu_1025(LIS Nlog(N)算法)的更多相关文章
- O(nlogn)LIS及LCS算法
morestep学长出题,考验我们,第二题裸题但是数据范围令人无奈,考试失利之后,刻意去学习了下优化的算法 一.O(nlogn)的LIS(最长上升子序列) 设当前已经求出的最长上升子序列长度为len. ...
- POJ 1631 Bridging signals(LIS O(nlogn)算法)
Bridging signals Description 'Oh no, they've done it again', cries the chief designer at the Waferla ...
- LIS的优化算法O(n log n)
LIS的nlogn的优化:LIS的优化说白了其实是贪心算法,比如说让你求一个最长上升子序列把,一起走一遍. 比如说(4, 2, 3, 1, 2,3,5)这个序列,求他的最长上升子序列,那么来看,如果求 ...
- 最长上升子序列(LIS)n2 nlogn算法解析
题目描述 给定一个数列,包含N个整数,求这个序列的最长上升子序列. 例如 2 5 3 4 1 7 6 最长上升子序列为 4. 1.O(n2)算法解析 看到这个题,大家的直觉肯定都是要用动态规划来做,那 ...
- hdu 1950 最长上升子序列(lis) nlogn算法【dp】
这个博客说的已经很好了.http://blog.csdn.net/shuangde800/article/details/7474903 简单记录一下自己学的: 问题就是求一个数列最长上升子序列的长度 ...
- Codeforces 486E LIS of Sequence --树状数组求LIS
题意: 一个序列可能有多个最长子序列,现在问每个元素是以下三个种类的哪一类: 1.不属于任何一个最长子序列 2.属于其中某些但不是全部最长子序列 3.属于全部最长子序列 解法: 我们先求出dp1[i] ...
- 【BZOJ】1049: [HAOI2006]数字序列(lis+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1049 题意:给一个长度为n的整数序列.把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希 ...
- LIS
五:LIS 概念 最长上升子序列(Longest Increasing Subsequence,LIS),在计算机科学上是指一个序列中最长的单调递增的子序列.比如一个序列31 2 6 3 8,他的最长 ...
- 动态规划:最长上升子序列(LIS)
转载请注明原文地址:http://www.cnblogs.com/GodA/p/5180560.html 学习动态规划问题(DP问题)中,其中有一个知识点叫最长上升子序列(longest incre ...
随机推荐
- Android Looper原理分析
实际业务使用场景: 某业务场景需要将本地数据传递到服务端,服务端再返回传递成功或者失败的信息. 1. 失败时: 重传5次 2.设置客户端请求的最小时间间隔,这个间隔内最多请求1次 具体逻辑如下:(这里 ...
- JAVA中的设计模式一(单例模式)
单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个 ...
- ReactNative实现图集功能
需求描述: 图片缩放.拖动.长按保存等基础图片查看的功能: 展示每张图片文本描述: 实现效果,如图: 实现步骤 使用第三方插件:react-native-image-zoom-viewer 插件Git ...
- Udacity并行计算课程笔记-The GPU Hardware and Parallel Communication Patterns
本小节笔记大纲: 1.Communication patterns gather,scatter,stencil,transpose 2.GPU hardware & Programming ...
- json小结和fastjson包的实际json操作
工作中,需要处理与另一方系统数据交换的问题,采用的是调用远程接口的方法,数据格式选择的是json,今天就来聊一聊json,主要分析json数据和java Bean之间的转换问题. 一.json是什么 ...
- 阅读MDN文档之基本盒模型(三)
Box properties Margin collapsing Adjacent siblings(相邻兄弟) Parent and first/last child Empty blocks Ac ...
- Mobiscroll的介绍【一款兼容PC和移动设备的滑动插件】
Mobiscroll是一个用于触摸设备的日期和时间选择器,它的使用不会改变HTML5.PhoneGap以及混合应用的原生用户体验.作为一款jQuery滑动选择插件,用户可以自定义主题样式,为自己的移动 ...
- 前端学习_01_css网页布局
引子 之前也自己陆陆续续地学了一些web方面的知识,包括前段和后端都有涉及到,自己也比较感兴趣,感谢peter老师,愿意无偿提供从零开始的教学,之前也看过peter老师的一些视频,节奏非常适合我,决心 ...
- 6月22日项目CodeReview问题及总结
后台代码部分 1. 枚举类的使用:当定义的某个字段有多种状态值或表示值时,可以创建一个枚举类将所有状态表示出来,并供其他使用到该字段的方法统一调用.枚举类定义可参考 '/banking-dbbp-pr ...
- Linux知识--初始linux
从今天开始陆续分享Linux的知识 因为服务器基本是Linux的 所以Linux不学明白 Shell命令不熟 会让你的办事效率大打折扣. 一.Linux文件系统 Linux文件系统是从Unix结构 ...