【线段树】bzoj3747 [POI2015]Kinoman
题解:http://www.cnblogs.com/zyfzyf/p/4105184.html
一、下传标记写法
- #include<cstdio>
- #include<algorithm>
- #include<cmath>
- using namespace std;
- #define lson rt<<1,l,m
- #define rson rt<<1|1,m+1,r
- int Num,CH[],f,c;
- inline void R(int &x){
- c=;f=;
- for(;c<''||c>'';c=getchar())if(c=='-')f=-;
- for(x=;c>=''&&c<='';c=getchar())(x*=)+=(c-'');
- x*=f;
- }
- typedef long long ll;
- int n,m,w[],now[],b[],fa[];
- ll ans,maxv[],delta[];
- void pushdown(int rt)
- {
- if(delta[rt])
- {
- delta[rt<<]+=delta[rt]; delta[rt<<|]+=delta[rt];
- maxv[rt<<]+=delta[rt]; maxv[rt<<|]+=delta[rt];
- delta[rt]=;
- }
- }
- void update(int ql,int qr,int v,int rt,int l,int r)
- {
- if(ql<=l&&r<=qr)
- {
- delta[rt]+=(ll)v;
- maxv[rt]+=(ll)v;
- return;
- }
- pushdown(rt); int m=l+r>>;
- if(ql<=m) update(ql,qr,v,lson);
- if(m<qr) update(ql,qr,v,rson);
- maxv[rt]=max(maxv[rt<<],maxv[rt<<|]);
- }
- ll query(int qr,int rt,int l,int r)
- {
- if(<=l&&r<=qr) return maxv[rt];
- pushdown(rt);
- int m=l+r>>; ll res=;
- if(<=m) res=max(res,query(qr,lson));
- if(m<qr) res=max(res,query(qr,rson));
- return res;
- }
- int main()
- {
- R(n); R(m);
- for(int i=;i<=n;++i) R(b[i]);
- for(int i=;i<=m;++i) R(w[i]);
- for(int i=;i<=n;++i)
- {
- fa[i]=now[b[i]];
- now[b[i]]=i;
- }
- for(int i=;i<=n;++i)
- {
- update(fa[i]+,i,(ll)w[b[i]],,,n);
- if(fa[i]) update(fa[fa[i]]+,fa[i],(ll)(-w[b[i]]),,,n);
- ans=max(ans,query(i,,,n));
- } printf("%lld\n",ans);
- return ;
- }
二、不下传标记写法
- #include<cstdio>
- #include<algorithm>
- #include<cmath>
- using namespace std;
- #define lson rt<<1,l,m
- #define rson rt<<1|1,m+1,r
- int Num,CH[],f,c;
- inline void R(int &x){
- c=;f=;
- for(;c<''||c>'';c=getchar())if(c=='-')f=-;
- for(x=;c>=''&&c<='';c=getchar())(x*=)+=(c-'');
- x*=f;
- }
- typedef long long ll;
- int n,m,w[],now[],b[],fa[];
- ll ans,maxv[],delta[];
- void update(int ql,int qr,int v,int rt,int l,int r)
- {
- if(ql<=l&&r<=qr)
- {
- delta[rt]+=(ll)v;
- return;
- }
- int m=l+r>>;
- if(ql<=m) update(ql,qr,v,lson);
- if(m<qr) update(ql,qr,v,rson);
- maxv[rt]=max(maxv[rt<<]+delta[rt<<],maxv[rt<<|]+delta[rt<<|]);
- }
- ll query(int qr,int rt,int l,int r)
- {
- if(<=l&&r<=qr) return maxv[rt]+delta[rt];
- int m=l+r>>; ll res=;
- if(<=m) res=max(res,query(qr,lson));
- if(m<qr) res=max(res,query(qr,rson));
- return res;
- }
- int main()
- {
- R(n); R(m);
- for(int i=;i<=n;++i) R(b[i]);
- for(int i=;i<=m;++i) R(w[i]);
- for(int i=;i<=n;++i)
- {
- fa[i]=now[b[i]];
- now[b[i]]=i;
- }
- for(int i=;i<=n;++i)
- {
- update(fa[i]+,i,(ll)w[b[i]],,,n);
- if(fa[i]) update(fa[fa[i]]+,fa[i],(ll)(-w[b[i]]),,,n);
- ans=max(ans,query(i,,,n));
- } printf("%lld\n",ans);
- return ;
- }
【线段树】bzoj3747 [POI2015]Kinoman的更多相关文章
- BZOJ3747 POI2015 Kinoman 【线段树】*
BZOJ3747 POI2015 Kinoman Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[ ...
- 2018.08.15 bzoj3747: [POI2015]Kinoman(线段树)
传送门 简单题. 先不管时间复杂度看看怎么做. 对于一段区间[l,r],如果从右端加入一个数a[r+1],对这个区间有什么影响?显然如果区间中已经有了a[r+1]这个数就会产生-a[i+1]的影响,否 ...
- BZOJ3747: [POI2015]Kinoman
传送门 线段树经典运用. 设$last_i$表示上一个与$i$相同的类型.然后每次更新$[last[i]+1,i]$和$[last[last[i]]+1,last[i]]$的答案就行了. //BZOJ ...
- BZOJ3747:[POI2015]Kinoman(线段树)
Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...
- 【BZOJ3747】[POI2015]Kinoman 线段树
[BZOJ3747][POI2015]Kinoman Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第 ...
- 【bzoj3747】Kinoman[POI2015](线段树)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3747 对于这种题,考虑固定区间的右端点为r,设区间左端点为l能取得的好看值总和为a[l] ...
- 【bzoj3747】[POI2015]Kinoman 线段树区间合并
题目描述 一个长度为n的序列,每个数为1~m之一.求一段连续子序列,使得其中之出现过一次的数对应的价值之和最大. 输入 第一行两个整数n,m(1<=m<=n<=1000000). 第 ...
- 【bzoj3747】[POI2015]Kinoman - 线段树(经典)
Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...
- [bzoj3747][POI2015]Kinoman_线段树
Kinoman bzoj-3747 POI-2015 题目大意:有m部电影,第i部电影的好看值为w[i].现在放了n天电影,请你选择一段区间l~r使得l到r之间的好看值总和最大.特别地,如果同一种电影 ...
随机推荐
- 洛谷P1546 最短网络 Agri-Net
P1546 最短网络 Agri-Net 526通过 959提交 题目提供者JOHNKRAM 标签图论贪心USACO 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 50分C++代码,求解 请指 ...
- centos6上使用fpm打python2.7 rpm包并兼容python2.6
centos6上使用fpm打python2.7 rpm包并兼容python2.6 作者 运维小兵_加油 关注 2016.09.22 00:28 字数 501 阅读 45评论 0喜欢 1 工作中我们常常 ...
- Join to domain powershell script
Join to domain powershell script $username = "domain\admin" $Password = "xxxxxxxx&quo ...
- 修改nginx对http请求数据大小限制
1. 问题发现 在公司搭建了一个基于mindoc的wiki知识库,用nginx做的反向代理服务器,同事在使用过程中上传某个文件一直失败,于是看着看下mindoc自己的日志文件,发现都是类似于fastd ...
- idea真不习惯啊
http://blog.csdn.net/z69183787/article/details/41416189
- ILSPY反编译工具下载代替收费的Reflector工具
原文发布时间为:2011-10-10 -- 来源于本人的百度文章 [由搬家工具导入] ILSPY反编译工具下载 http://build.sharpdevelop.net/BuildArtefacts ...
- HDU1003MAX SUM (动态规划求最大子序列的和)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- 2017年上海金马五校程序设计竞赛:Problem K : Treasure Map (蛇形填数)
Description There is a robot, its task is to bury treasures in order on a N × M grids map, and each ...
- [bzoj3306]树——树上倍增+dfs序+线段树
Brief Description 您需要写一种数据结构,支持: 更改一个点的点权 求一个子树的最小点权 换根 Algorithm Design 我们先忽略第三个要求. 看到要求子树的最小点权,我们想 ...
- vue this.$router.push 页面不刷新
解决办法: 使用 watch,观察路由,发生变化重新获取数据 <script> export default { data() { return { data: {} } }, metho ...