首页 > 代码库 > hdu 5256 序列变换
hdu 5256 序列变换
最长上升子序列 nlogn;也是从别人的博客学来的
#include<iostream> #include<algorithm> #define maxn 100000+5 using namespace std; int n; int a[maxn]; int solve(int b[],int l) { int f[maxn];//f[i]表示子序列长度为i+1的序列中,末尾元素最小的元素的值 int k=0; f[k++]=b[0]; for(int i=1;i<l;i++) { if(b[i]>=f[k-1]) f[k++]=b[i]; else { int pos=upper_bound(f,f+k,a[i])-f; f[pos]=a[i]; } } return k; } int main() { cin.sync_with_stdio(false); int t; cin>>t; int flag=1; while(t--) { cin>>n; for(int i=0;i<n;i++) { int x; cin>>x; a[i]=x-i; } int re=solve(a,n); cout<<"Case "<<"#"<<flag++<<":"<<endl; cout<<n-re<<endl; } return 0; }
hdu 5256 序列变换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。