博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3747 POI2015Kinoman(线段树)
阅读量:5088 次
发布时间:2019-06-13

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

  考虑固定左端点,求出该情况下能获得的最大值。于是每次可以在某数第一次出现的位置加上其价值,第二次出现的位置减掉其价值,查询前缀最大值就可以了。每次移动左端点在线段树上更新即可。

#include
#include
#include
#include
#include
#include
using namespace std;int read(){ int x=0,f=1;char c=getchar(); while (c<'0'||c>'9') { if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f;}#define N 1000010#define ll long longint n,m,a[N],b[N],p[N],nxt[N];int L[N<<2],R[N<<2];ll mx[N<<2],sum[N<<2],ans;void build(int k,int l,int r){ L[k]=l,R[k]=r; if (l==r) return; int mid=l+r>>1; build(k<<1,l,mid); build(k<<1|1,mid+1,r);}void up(int k){ sum[k]=sum[k<<1]+sum[k<<1|1]; mx[k]=max(mx[k<<1],sum[k<<1]+mx[k<<1|1]);}void modify(int k,int p,int x){ if (L[k]==R[k]) {mx[k]=sum[k]=x;return;} int mid=L[k]+R[k]>>1; if (p<=mid) modify(k<<1,p,x); else modify(k<<1|1,p,x); up(k);}ll query(int k,int l,int r){ if (L[k]==l&&R[k]==r) return mx[k]; int mid=L[k]+R[k]>>1; if (r<=mid) return query(k<<1,l,r); else if (l>mid) return query(k<<1|1,l,r); else return max(query(k<<1,l,mid),sum[k<<1]+query(k<<1|1,mid+1,r));}int main(){#ifndef ONLINE_JUDGE freopen("bzoj3747.in","r",stdin); freopen("bzoj3747.out","w",stdout); const char LL[]="I64d\n";#else const char LL[]="%lld\n";#endif n=read(),m=read(); for (int i=1;i<=n;i++) { a[i]=read(); nxt[p[a[i]]]=i,p[a[i]]=i; } for (int i=1;i<=n;i++) if (!nxt[i]) nxt[i]=n+1;nxt[n+1]=n+1; for (int i=1;i<=m;i++) b[i]=read(); build(1,1,n+1); memset(p,0,sizeof(p)); for (int i=1;i<=n;i++) if (!p[a[i]]) p[a[i]]=1,modify(1,i,b[a[i]]),modify(1,nxt[i],-b[a[i]]); for (int i=1;i<=n;i++) { ans=max(ans,query(1,i,n)); modify(1,i,0),modify(1,nxt[i],b[a[i]]),modify(1,nxt[nxt[i]],-b[a[i]]); } cout<

 

转载于:https://www.cnblogs.com/Gloid/p/9737356.html

你可能感兴趣的文章
3.0.35 platform 设备资源和数据
查看>>
centos redis 安装过程,解决办法
查看>>
IOS小技巧整理
查看>>
WebDriverExtensionsByC#
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
sublime 配置java运行环境
查看>>
在centos上开关tomcat
查看>>
重启rabbitmq服务
查看>>
正则表达式(进阶篇)
查看>>
无人值守安装linux系统
查看>>
【传道】中国首部淘宝卖家演讲公开课:农业本该如此
查看>>
jQuery应用 代码片段
查看>>
MVC+Servlet+mysql+jsp读取数据库信息
查看>>
黑马程序员——2 注释
查看>>
用OGRE1.74搭建游戏框架(三)--加入人物控制和场景
查看>>
转化课-计算机基础及上网过程
查看>>
android dialog使用自定义布局 设置窗体大小位置
查看>>
ionic2+ 基础
查看>>
互联网模式下我们更加应该“专注”
查看>>