博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Poi2010 Monotonicity 2
阅读量:6709 次
发布时间:2019-06-25

本文共 1406 字,大约阅读时间需要 4 分钟。

树状数组优化dp

可以证明最优解一定是通过之前的最优转移过来的,所以每一个点只需要保存以该节点为结尾的最长长度即可

对于不同符号,等于号维护数组,大于小于维护树状数组

#include
#include
#include
#include
#include
#define N 500005using namespace std;int n,m,a[N],f[N],ans,c[2][2*N],ff[2*N],maxn;char s[N];int lowbit(int x){ return x&(-x);}void update(int k,int x,int y){ while(x<=maxn){ c[k][x]=max(c[k][x],y); x+=lowbit(x); }}int query(int k,int x){ int ans=0; while(x){ ans=max(c[k][x],ans); x-=lowbit(x); } return ans;}int main(){ //freopen("mot.in","r",stdin); //freopen("mot.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); maxn=max(maxn,a[i]); } for(int i=1;i<=m;i++){ s[i]=getchar(); while(s[i]!='<'&&s[i]!='>'&&s[i]!='=') s[i]=getchar(); } int x1,x2,x3; char ch; for(int i=1;i<=n;i++){ x1=query(0,a[i]-1); x2=query(1,maxn-a[i]); x3=ff[a[i]]; f[i]=max(x1,max(x2,x3))+1; ch=s[(f[i]-1)%m+1]; if(ch=='<') update(0,a[i],f[i]); if(ch=='>') update(1,maxn-a[i]+1,f[i]); if(ch=='=') ff[a[i]]=max(ff[a[i]],f[i]); } for(int i=1;i<=n;i++){ //printf("%d %d\n",i,f[i]); ans=max(ans,f[i]); } printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/Ren-Ivan/p/7746732.html

你可能感兴趣的文章
(转)基于MVC4+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作...
查看>>
数据结构导论初步理解
查看>>
NOI 2015 滞后赛解题报告
查看>>
Eclipse开发C/C++之使用技巧小结,写给新手
查看>>
J2SE核心开发实战(二)——字符串与包装类
查看>>
几个关于tableView的问题解决方式整合
查看>>
gulp 常用插件汇总
查看>>
在linux下玩转usb摄像头
查看>>
RequiredFieldValidator----验证控件不起作用
查看>>
服务器端发送邮件签名采用Data URI scheme包含图片
查看>>
什么是DSCP,如何使用DSCP标记搭配ROS策略
查看>>
JPQL设置自增长、只读、文本类型等的注解
查看>>
【.net 深呼吸】自定义应用程序配置节
查看>>
【POI】对于POI无法处理超大xls等文件,官方解决方法【已解决】【多线程提升速率待定】...
查看>>
<html>
查看>>
SQL 查询逻辑处理顺序
查看>>
Android实训案例(七)——四大组件之中的一个Service初步了解,实现通话录音功能,抽调接口...
查看>>
Springmvc 中org.springframework.http.converter.json.MappingJackson2HttpMessageConverter依赖jackson包...
查看>>
[转载]从业务运维转到产品经理,我摸爬滚打的产品之路
查看>>
JDK工具jstatd用法详解(转)
查看>>