题目

感觉这种题好套路啊,怎么又是这个做法

癌不过怎么没有人和我一样些写套路做法,那干脆来写个题解吧

我们考虑枚举区间的右端点,这样我们只需要考虑从\(1\)到\(i\)的最大区间就好了

由于我们选择了这个位置作为区间的右端点,首先产生的贡献是这个电影的价值,但我们上一次看得这个电影就不能产生贡献了,而且不仅仅是不能产生贡献了,还得把原来的贡献减掉,于是把原来的位置取反

相应的,上上次出现的位置我们取反了,这次就不用考虑它了,于是把那个位置变成\(0\)就好了

最后的答案就是最大子段和了,线段树随便维护一下就好了

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define LL long long
#define re register
#define maxn 1200005
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
int n,m;
int l[maxn<<1],r[maxn<<1];
LL d[maxn<<1],lc[maxn<<1],rc[maxn<<1],ans,sum[maxn<<1];
int nx[maxn],cnt[maxn];
int w[maxn],a[maxn],pos[maxn];
inline void pushup(int i) {
sum[i]=sum[i<<1|1]+sum[i<<1];
lc[i]=max(lc[i<<1],sum[i<<1]+lc[i<<1|1]);
rc[i]=max(rc[i<<1|1],sum[i<<1|1]+rc[i<<1]);
d[i]=max(d[i<<1],d[i<<1|1]);d[i]=max(d[i],lc[i<<1|1]+rc[i<<1]);
}
void build(int x,int y,int i) {
l[i]=x,r[i]=y;
if(x==y) return;
int mid=x+y>>1;
build(x,mid,i<<1),build(mid+1,y,i<<1|1);
}
void change(int pos,int i,int val) {
if(pos==l[i]&&l[i]==r[i]) {d[i]=sum[i]=lc[i]=rc[i]=val;return;}
int mid=l[i]+r[i]>>1;
if(pos<=mid) change(pos,i<<1,val);
else change(pos,i<<1|1,val);
pushup(i);
}
int main() {
n=read(),m=read();
for(re int i=1;i<=n;i++) a[i]=read();
for(re int i=1;i<=m;i++) w[i]=read();
build(1,n,1);
for(re int i=1;i<=n;i++)
nx[i]=pos[a[i]],pos[a[i]]=i;
for(re int i=1;i<=n;i++) {
if(!nx[i]) change(i,1,w[a[i]]);
else if(!nx[nx[i]]) change(i,1,w[a[i]]),change(nx[i],1,-1*w[a[i]]);
else change(i,1,w[a[i]]),change(nx[i],1,-1*w[a[i]]),change(nx[nx[i]],1,0);
ans=max(ans,d[1]);
}
printf("%lld\n",ans);
return 0;
}

[POI2015]KIN的更多相关文章

  1. 【LG3582】[POI2015]KIN

    [LG3582][POI2015]KIN 题面 洛谷 题解 这题维护区间的信息有点像最大子段和,我们往最大子段和上面靠. 对于一个颜色,我们有一个直观的想法就是将它一次出现的权值设为正,二次出现就设为 ...

  2. [POI2015]KIN[线段树]

    很套路的维护最大和子段 #include <cmath> #include <cstring> #include <cstdio> #include <cst ...

  3. 洛谷P3582 [POI2015]KIN

    题目描述 共有\(m\)部电影,编号为\(1--m\),第\(i\)部电影的好看值为\(w[i]\).在\(n\)天之中(从\(1~n\)编号)每天会放映一部电影,第\(i\)天放映的是第\(f[i] ...

  4. POI 2018.10.27

    [POI2015]LOG 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它们都减去1,询问能否进 ...

  5. CSP考前总结

    10.2 考试: 1.数位DP 或者找规律 2.SB题,扫一遍找最大最小即可 3.莫比乌斯反演 出题人相出个数论和数据结构的综合题,但是找不到NOIP级别的,没办法只能忍痛割爱出个莫比乌斯,话说回来, ...

  6. 2019杭电多校二 L. Longest Subarray (线段树)

    大意: 给定序列$a$, 元素范围$[1,C]$, 求一个最长子序列, 满足每个元素要么不出现, 要么出现次数$\le K$. 枚举右端点, 考虑左端点合法的位置. 显然一定是$C$种颜色合法位置的交 ...

  7. 「POI2015」KIN

    传送门 Luogu 解题思路 想要做这道题,只要会维护区间最大子段和就好了. 而这个可以用线段树维护模板点这里 对于重复的情况,我们可以对每一个位置记一个前驱表示和当前位置种类相同的前一个位置. 然后 ...

  8. BZOJ 4385: [POI2015]Wilcze doły

    4385: [POI2015]Wilcze doły Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 648  Solved: 263[Submit][ ...

  9. BZOJ 4384: [POI2015]Trzy wieże

    4384: [POI2015]Trzy wieże Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 217  Solved: 61[Submit][St ...

随机推荐

  1. log4j记录日志 和 webAppRootKey关系

    今天发现一个问题,就是后台从某天开始不再记录日志了,最后发现是 webAppRootKey 的 value 的值必须要和log4j的注入变量要一致. 如下:web.xml文件的 webAppRootK ...

  2. Maven 配置Tomcat

    1.Tomcat conf 下的tomcat-users.xml 增加 <role rolename="manager"/> <role rolename=&qu ...

  3. 二:Vim常用命令

    一般模式下的命令: -- 插入命令 i 光标前插入 I 当前行开始 o 下一行 O 上一行插入新行 a 光标后插入 A 当前行末尾 -- 定位命令 :set nu 显示行号 :set nonu 取消行 ...

  4. Springmvc file多附件上传 显示 删除操作

    之前项目需求要做一个多附件上传 并显示上传文件 带删除操作 一筹莫展之际搜到某个兄弟发的博客感觉非常好用被我copy下来了此贴算是改良版 再次感谢(忘记叫什么了时间也有点久没有历史记录了)先上图 基于 ...

  5. php FastCGI 进程意外退出 错误解决方法

    服务器windows2008,php5.5 / php5.6,需要安装VC++运行库. 到Microsoft网站下载“Microsoft Visual C++ 2012 Redistributable ...

  6. 通过反射感知Redis类里边全部的操作方法

    <?php //通过反射感知Redis类里边全部的操作方法 //根据Redis类实例化一个反射类对象 $me = new ReflectionClass('Redis'); //获得Redis类 ...

  7. The method setItems(String) in the type ForTokensTag is not applicable for the arguments (Object)

    1. 问题 看到这个错误以为是貌似jsp页面有误,c:forTokens标签用错了?? An error occurred at line: in the jsp file: /WEB-INF/pag ...

  8. 我的gulp第一个程序

    以前都是单枪匹马的干,从没用过模块化的打包工具,加入新的团队后,模块化开发学到不少,尤其是工具的使用.团队目前较多的使用gulp,也是最流行的一款前端打包工具.最近Team开始尝试用gulp,我也只是 ...

  9. js中常见面试问题-笔记

    原文参考https://mp.weixin.qq.com/s/mCVL6qI33XeTg4YGIKt-JQ 1.事件代理给父元素添加事件,利用事件冒泡原理,在根据e.target来获取子元素<u ...

  10. WPF 蒙罩层 LoadingPage

    WPF 蒙罩层 LoadingPage 前言 无论是在PC客户端,移动端,网站,在遇到长时间处理的时候都会需要用到蒙罩层,让用户有更好的体现.今天上网逛了一下各位前辈网友的蒙罩层的实现方式,觉得有很多 ...