hdoj 1950 Bridging signals【二分求最大上升子序列长度】【LIS】
Bridging signals
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 961 Accepted Submission(s):
627
designer at the Waferland chip factory. Once more the routing designers have
screwed up completely, making the signals on the chip connecting the ports of
two functional blocks cross each other all over the place. At this late stage of
the process, it is too
expensive to redo the routing. Instead, the engineers
have to bridge the signals, using the third dimension, so that no two signals
cross. However, bridging is a complicated operation, and thus it is desirable to
bridge as few signals as possible. The call for a computer program that finds
the maximum number of signals which may be connected on the silicon surface
without rossing each other, is imminent. Bearing in mind that there may be
housands of signal ports at the boundary of a functional block, the problem asks
quite a lot of the programmer. Are you up to the task?

Figure 1. To the left: The two blocks' ports
and their signal mapping (4,2,6,3,1,5). To the right: At most three signals may
be routed on the silicon surface without crossing each other. The dashed signals
must be bridged.
A typical situation is schematically depicted in figure
1. The ports of the two functional blocks are numbered from 1 to p, from top to
bottom. The signal mapping is described by a permutation of the numbers 1 to p
in the form of a list of p unique numbers in the range 1 to p, in which the i:th
number pecifies which port on the right side should be connected to the i:th
port on the left side.
Two signals cross if and only if the straight lines
connecting the two ports of each pair do.
positive integer n, telling the number of test scenarios to follow. Each test
scenario begins with a line containing a single positive integer p<40000, the
number of ports on the two functional blocks. Then follow p lines, describing
the signal mapping: On the i:th line is the port number of the block on the
right side which should be connected to the i:th port of the block on the left
side.
maximum number of signals which may be routed on the silicon surface without
crossing each other.
#include<stdio.h>
#include<string.h>
int main()
{
int t;
int p,top,l,r,mid,i,m;
int a[44000];
scanf("%d",&t);
while(t--)
{
scanf("%d",&p);
scanf("%d",&a[0]);
int top=0;
for(i=1;i<p;i++)
{
scanf("%d",&m);
if(a[top]<m)
a[++top]=m;
else
{
l=0;r=top;mid=0;
while(r>=l)
{
mid=(r+l)/2;
if(a[mid] < m)
l=mid+1;
else
r=mid-1;
}
a[r+1]=m;
}
}
printf("%d\n",top+1);
}
return 0;
}
hdoj 1950 Bridging signals【二分求最大上升子序列长度】【LIS】的更多相关文章
- (hdu)1950 Bridging signals(最长上升子序列)
Problem Description 'Oh no, they've done it again', cries the chief designer at the Waferland chip f ...
- hdu 1950 Bridging signals 求最长子序列 ( 二分模板 )
Bridging signals Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- poj 1631 Bridging signals (二分||DP||最长递增子序列)
Bridging signals Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9234 Accepted: 5037 ...
- HDU 1950 Bridging signals【最长上升序列】
解题思路:题目给出的描述就是一种求最长上升子序列的方法 将该列数an与其按升序排好序后的an'求出最长公共子序列就是最长上升子序列 但是这道题用这种方法是会超时的,用滚动数组优化也超时, 下面是网上找 ...
- HDU 1950 Bridging signals (DP)
职务地址:HDU 1950 这题是求最长上升序列,可是普通的最长上升序列求法时间复杂度是O(n*n).显然会超时.于是便学了一种O(n*logn)的方法.也非常好理解. 感觉还用到了一点贪心的思想. ...
- HDU 1950 Bridging signals(LIS)
最长上升子序列(LIS)的典型变形,O(n^2)的动归会超时.LIS问题可以优化为nlogn的算法. 定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序列,则记录最小的那个最末元 ...
- Poj 1631 Bridging signals(二分+DP 解 LIS)
题意:题目很难懂,题意很简单,求最长递增子序列LIS. 分析:本题的最大数据40000,多个case.用基础的O(N^2)动态规划求解是超时,采用O(n*log2n)的二分查找加速的改进型DP后AC了 ...
- HDU 1950 Bridging signals
那么一大篇的题目描述还真是吓人. 仔细一读其实就是一个LIS,还无任何变形. 刚刚学会了个二分优化的DP,1A无压力. //#define LOCAL #include <iostream> ...
- HDU 1950 Bridging signals (LIS,O(nlogn))
题意: 给一个数字序列,要求找到LIS,输出其长度. 思路: 扫一遍+二分,复杂度O(nlogn),空间复杂度O(n). 具体方法:增加一个数组,用d[i]表示长度为 i 的递增子序列的最后一个元素, ...
随机推荐
- iOS8上本地通知接收不到的问题
需要手动加上这句话 if ([UIApplicationinstancesRespondToSelector:@selector(registerUserNotificationSettings:) ...
- mysql 表操作
创建表 简单的方式 CREATE TABLE person ( number INT(11), name VARCHAR(255), birthday DATE ); 或者是 CREATE TABLE ...
- cocos2d-x Android 环境搭建问题汇总
初次接触Cocos2d-x,准备搭建一个hello world的Android环境,问题遇到很多.在此记录,为自己,也为大家,避免重走弯路! 具体的环境搭建,可以参考官方的文档.在Windows7平台 ...
- C++静态成员函数访问非静态成员的几种方法
大家都知道C++中类的成员函数默认都提供了this指针,在非静态成员函数中当你调用函数的时候,编译器都会“自动”帮你把这个this指针加到函数形参里去.当然在C++灵活性下面,类还具备了静态成员和静态 ...
- DOM 之 document 查找元素方法
DOM 之 document 查找元素方法 getElementById("idName"); // 始终取得第一个 idName 的元素 getElementsByTagName ...
- C#程序中:如何向xml文件中写入数据和读取数据
xml文件作为外部信息存储文件使用简单,方便,其结构和表格略有相似,下面简单的说一下xml文件内容的读取 …… using System.Xml;using System.IO;namespace W ...
- DevExpress GridControl 中下拉框联动效果的实现(及支持文本框录入情况)
先解释一下标题: grid中的某一列默认为文本框,根据需要动态的变更为下拉框,且支持动态变更数据源 需求是这样的: 有一些参数(A),这些参数又分别对应另外的参数(B),所以,先把A作为一列,B根据A ...
- 精通 Oracle+Python,第 3 部分:数据解析
进行数据解析的理由不计其数,相关的工具和技巧也同样如此.但是,当您需要用这些数据做一些新的事情时,即使有“合适的”工具可能也是不够的.这一担心对于异类数据源的集成同样存在.用来做这项工作的合适工具迟早 ...
- Python【第十篇】协程、异步IO
大纲 Gevent协程 阻塞IO和非阻塞IO.同步IO和异步IO的区别 事件驱动.IO多路复用(select/poll/epoll) 1.协程 1.1协程的概念 协程,又称微线程,纤程.英文名Coro ...
- VMware内安装Ubuntu后安装vmtools
今天处于好奇安装了Ubuntu,可是虚拟机运行的时候发现界面很小,于是百度发现要安装一个工具,看了很多方法,就这个比较实用,和大家分享: 第一步:进入系统后,点击虚拟机上的安装vmware tools ...