Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 14226 | Accepted: 7696 |
Description
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 specifies 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.
Input
Output
Sample Input
4 6 4 2 6 3 1 5 10 2 3 4 5 6 7 8 9 10 1 8 8 7 6 5 4 3 2 1 9 5 8 9 2 3 1 7 4 6
Sample Output
3 9 1 4
Source
Regionals 2003 >> Europe - Northwestern
问题链接:UVALive2931 POJ1631 HDU1950 Bridging signals。
问题简述:参见上述链接。
问题分析:最长上升子序列问题。
程序说明:程序改写了一版,使用C语言的输入输出函数,不然POJ1631会TLE(超时)。留下原有程序,有个比较。
题记:(略)
AC的C++语言程序如下:
/* UVALive2931 POJ1631 HDU1950 Bridging signals */ #include <iostream> #include <stdio.h> using namespace std; const int N = 40000; int stack[N+1], ps; int main() { int t, n, val; scanf("%d", &t); while(t--) { scanf("%d", &n); ps = 0; for(int i=1; i<=n; i++) { scanf("%d", &val); int left=1, right=ps, mid; while(left <= right) { mid = (left + right) / 2; if(val > stack[mid]) left = mid + 1; else right = mid - 1; } stack[left] = val; ps = max(ps, left); } printf("%d\n", ps); } return 0; }
AC的C++语言程序如下:
/* UVALive2931 POJ1631 HDU1950 Bridging signals */ #include <iostream> using namespace std; const int N = 40000; int stack[N+1], ps; int main() { int t, n, val; cin >> t; while(t--) { cin >> n; ps = 0; for(int i=1; i<=n; i++) { cin >> val; int left=1, right=ps, mid; while(left <= right) { mid = (left + right) / 2; if(val > stack[mid]) left = mid + 1; else right = mid - 1; } stack[left] = val; ps = max(ps, left); } cout << ps << endl; } return 0; }