📄 bridging signals(dp(nlogn)).cpp
字号:
#include <cstdio>
#include <string>
#define NMAX 40100
int p,n;
int seq[NMAX];
int len[NMAX];
int dp[NMAX];
int main()
{
int i,j;
scanf("%d", &n);
while (n --) {
scanf("%d", &p);
for (i=1;i<=p;i++) {
scanf("%d", seq+i);
}
dp[0] = dp[1] = 1;
len[0] = -1;
len[1] = seq[1];
int mmax = 1;
for (i=2;i<=p;i++) {
dp[i] = 1;
len[i] = INT_MAX;
int left = 0, right = mmax;
while (right >= left) {
int mid = (left + right) / 2;
if (seq[i] > len[mid]) {
left = mid+1;
}
else {
right = mid-1;
}
}
dp[i] = left;
if (seq[i] < len[ dp[i] ]) {
len[ dp[i] ] = seq[i];
}
mmax = mmax > dp[i] ? mmax : dp[i];
}//for i
printf("%d\n", mmax);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -