4282: 慎二的随机数列 DP
2016-02-28 08:32
381 查看
最近怎么什么傻逼题都要WA一遍,感觉要get“省选药丸”了。
可以发现存在一个最优解使得所有的未知数都在里面,因为如果有一个不在里面,那可以通过替换来得到最优解。
那么把每个数都减去他前面未知数的个数,做LIS,最后答案再加上位置数的个数就可以了。
为何upper_bound WA了?我写的姿势不对?
可以发现存在一个最优解使得所有的未知数都在里面,因为如果有一个不在里面,那可以通过替换来得到最优解。
那么把每个数都减去他前面未知数的个数,做LIS,最后答案再加上位置数的个数就可以了。
为何upper_bound WA了?我写的姿势不对?
#include<iostream> #include<cstdio> #include<algorithm> #define inf 1000000007 using namespace std; int n,cnt,sum,ans,top; int a[100005],stack[100005]; inline int read() { int a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f; } int main() { n=read(); for (int i=1;i<=n;i++) { char opt[5]; scanf("%s",opt); if (opt[0]=='K') { int x=read(); a[++cnt]=x-sum; } else sum++; } a[0]=-inf; for (int i=1;i<=cnt;i++) { if (a[i]>stack[top]) stack[++top]=a[i]; else { int l=1,r=top; while (l<=r) { int mid=l+r>>1; if (a[i]>stack[mid]) l=mid+1; else r=mid-1; } stack[l]=a[i]; } ans=max(ans,top); } cout << ans+sum << endl; return 0; }
相关文章推荐
- 39. Combination Sum
- 【extjs】 ext5 Ext.grid.Panel 分页,搜索
- postal.js使用
- 骆驼命名法,帕斯卡命名法和匈牙利命名法
- iOS开发--知识点总结
- Manthan, Codefest 16 633C Spy Syndrome 2(dfs + stl)
- Android 动画基础
- hdu 1201 18岁生日
- git
- 国内四个不错的技术团体博客
- 国内四个不错的技术团体博客
- XStream 学习笔记
- 蓝桥杯 BASIC 29 高精度加法(大数)
- OSChina 周日乱弹 ——冯小牛 我要治愈你!
- js正则表达式
- 国务院关于开展新型农村社会养老保险试点的指导意见
- shell命令执行顺序
- Cookie的细节具体保存的有效时间
- BZOJ 2467: [中山市选2010]生成树|组合数学
- AOP代理分析