【HDU】5256 序列变换(最长上升子序列变形)
2015-06-03 22:29
363 查看
如果a[i]和a[j]想不变,需要满足的条件就是
a[j] - a[i] > j - i
也就是a[i] - i < a[j] - j
比如1 4 2 就不满足,所以1和2之间一定有一个需要改变
所以我们对所有a[i] - i求其最长上升子序列就可以了
a[j] - a[i] > j - i
也就是a[i] - i < a[j] - j
比如1 4 2 就不满足,所以1和2之间一定有一个需要改变
所以我们对所有a[i] - i求其最长上升子序列就可以了
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 100005; const int INF = 5000000; int n; int arr[maxn],g[maxn]; int main(){ int T,Case = 1; scanf("%d",&T); while(T--){ scanf("%d",&n); for(int i = 1; i <= n; i ++) g[i] = INF; for(int i = 1; i <= n; i++){ scanf("%d",&arr[i]); arr[i] -= i; } int ans = 0; for(int i = 1; i <= n; i++){ int pos = upper_bound(g + 1,g + n + 1,arr[i]) - g; ans = max(ans,pos); g[pos] = arr[i]; } printf("Case #%d:\n",Case++); printf("%d\n",n - ans); } return 0; }
相关文章推荐
- 【leetcode 两个链表的交集点】Intersection of Two Linked Lists
- 用SecureCRT在windows和CentOS间上传下载文件
- 5.2-5
- 第一天
- POJ 2386 Lake Counting
- Android通过Wifi来调试
- 正向代理与反向代理的区别
- Kali Linux安装360免费wifi驱动。
- 仿Iphone的Launcher开发,长按可拖拽删除的GridView
- Python学习(七) 流程控制if语句
- spring框架一
- 对协方差的理解
- [转载]datatable删除行!细节让我好无语呀!
- 15HD_OJ——计算直线的交点数
- Android跨进程通信之AIDL机制和广播机制的异同
- debian 8 chromium安装flash play
- C#技术漫谈之垃圾回收机制(GC)
- 【算法】字符串包含
- Mysql数据库乱码总结
- 软件工程课程改进意见