HDU 1950 Bridging signals
阿新 • • 發佈:2019-03-30
highlight targe n) get 1+n htm rgs signal hellip
http://acm.hdu.edu.cn/showproblem.php?pid=1950
題目
芯片上有一些接口要連起來,線與線之間不能交叉,求最多能連多少線
題解
很容易得到不交叉的線從上往下編號是遞增的,就是LIS裸題……
用二分轉移就好了,見https://www.cnblogs.com/sahdsg/p/10622662.html
AC代碼
#include<bits/stdc++.h> using namespace std; #define REP(r,x,y) for(register int r=(x); r<(y); r++) #define PER(r,x,y) for(register int r=(x); r>(y); r--) #define REPE(r,x,y) for(register int r=(x); r<=(y); r++) #define PERE(r,x,y) for(register int r=(x); r>=(y); r--) #ifdef sahdsg #define DBG(...) printf(__VA_ARGS__) #else #define DBG(...) (void)0 #endif #define MAXN 40007 #define INF 0x3f3f3f3f int arr[MAXN]; int n; int dp[MAXN], pd[MAXN]; inline void solve() { memset(pd,0x3f,sizeof pd); int ans=0; REP(i,0,n) { int k=lower_bound(pd+1,pd+1+n,arr[i])-pd; dp[i]=k; pd[k]=arr[i]; ans=max(ans,k); } printf("%d\n", ans); } int main() { #ifdef sahdsg freopen("in.txt", "r", stdin); #endif int t; scanf("%d", &t); while(0<t--) { scanf("%d", &n); REP(i,0,n) { scanf("%d", &arr[i]); } solve(); } return 0; }
不知道為什麽用fastio反而變慢了……(沒有超過10^5個數?)
HDU 1950 Bridging signals