luogu 3582 线段树
线段树内存下mx[k]的值是动态的1-i这个区间的贡献答案
实际上点存的就是区间答案,但用max是为了求最大区间答案(有可能虽然贡献被消除但后来有更大的贡献填补答案空缺)
#include<bits/stdc++.h>
#define rep(i,x,y) for(register int i=x;i<=y;i++)
#define dec(i,x,y) for(register int i=x;i>=y;i--)
#define LL long long
#define In freopen("7.in","r",stdin)
#define In2 freopen("8.in","r",stdin)
using namespace std;
const int N=1e6+;
inline int read(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;}
int n,m,w[N],f[N],mark[N],pre[N];
LL mx[N<<],tag[N<<],ans=;
inline void pushup(int k){
mx[k]=max(mx[k<<],mx[k<<|]);}
inline void pushdown(int k,int l,int r,int mid){
if(l==r) return;
LL v=tag[k];tag[k]=;
tag[k<<]+=v;mx[k<<]+=v;
tag[k<<|]+=v;mx[k<<|]+=v;}
inline void change(int k,int l,int r,int x,int y,LL d){
if(x<=l&&r<=y){
tag[k]+=d;mx[k]+=d;return;}
int mid=(l+r)>>;
if(tag[k]) pushdown(k,l,r,mid);
if(x<=mid) change(k<<,l,mid,x,y,d);
if(mid<y) change(k<<|,mid+,r,x,y,d);
pushup(k);
}
inline LL query(int k,int l,int r,int x,int y){
if(x<=l&&r<=y) return mx[k];LL res=;
int mid=(l+r)>>;if(tag[k])pushdown(k,l,r,mid);
if(x<=mid) res=max(res,query(k<<,l,mid,x,y));
if(mid<y) res=max(res,query(k<<|,mid+,r,x,y));
return mx[k];}
int main(){
n=read();m=read();
rep(i,,n) f[i]=read();
rep(i,,m) w[i]=read();
rep(i,,n) pre[i]=mark[f[i]],mark[f[i]]=i; rep(i,,n){
change(,,n,pre[i]+,i,w[f[i]]);
if(pre[i]) change(,,n,pre[pre[i]]+,pre[i],-w[f[i]]);
ans=max(ans,query(,,n,,i));
}
printf("%lld\n",ans);return ;
}
luogu 3582 线段树的更多相关文章
- 【luogu P3372 线段树1】 模板
线段树的模板题 题目链接:https://www.luogu.org/problemnew/show/P3372 update区间修改,query区间求和 #include <iostream& ...
- 【luogu P3373 线段树2】 模板
题目链接:https://www.luogu.org/problemnew/show/P3373 lazy标记两个,先乘后加 #include <iostream> #include &l ...
- [线段树]Luogu P3372 线段树 1【模板】
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #d ...
- 【BZOJ1798】【AHOI2009】维护序列(线段树)
题目链接 题解 这不就是luogu的线段树2的板子吗.... 没有任何的区别... 上代码吧... #include<iostream> #include<cstdio> #i ...
- Luogu 45887 全村最好的嘤嘤刀(线段树 树状数组)
https://www.luogu.org/problemnew/show/T45887 题目背景 重阳节到了,我们最好的八重樱拥有全村最好的嘤嘤刀…… 题目描述 在绯玉丸力量的影响下,八重村成了一条 ...
- Luogu P4643 【模板】动态dp(矩阵乘法,线段树,树链剖分)
题面 给定一棵 \(n\) 个点的树,点带点权. 有 \(m\) 次操作,每次操作给定 \(x,y\) ,表示修改点 \(x\) 的权值为 \(y\) . 你需要在每次操作之后求出这棵树的最大权独立集 ...
- Luogu 2590 [ZJOI2008]树的统计 / HYSBZ 1036 [ZJOI2008]树的统计Count (树链剖分,LCA,线段树)
Luogu 2590 [ZJOI2008]树的统计 / HYSBZ 1036 [ZJOI2008]树的统计Count (树链剖分,LCA,线段树) Description 一棵树上有n个节点,编号分别 ...
- NOIP 2016 天天爱跑步 (luogu 1600 & uoj 261) - 线段树
题目传送门 传送点I 传送点II 题目大意 (此题目不需要大意,我认为它已经很简洁了) 显然线段树合并(我也不知道哪来这么多显然) 考虑将每条路径拆成两条路径 s -> lca 和 t -> ...
- Luogu 3373 又乘又加的线段树
Luogu 3373 又乘又加的线段树 当给一个节点加上一个加法标记时,直接把加法标记 += 新值: 当给一个节点加上一个乘法标记时,把乘法标记和加法标记同时 *= 新值.(注意pushdown函数中 ...
随机推荐
- Java复习总结——详细理解Java反射机制
反射是什么 反射的作用用一句简单的话来讲就是可以对代码进行操作的代码,这个特性经常在被用于创建JavaBean中,通常造轮子的人会用到这个特性,而应用程序员用到这个特性的场景则较少. 能够分析类能力的 ...
- 黑苹果 技嘉 B250M-DS3H-CF i57500 HD630 EFI引导驱动发布
1. 鉴于苹果的MacOS OSX系统的优越性,由于现在公司的电脑为windows但是自己用的笔记本又是Mac,导致需要适应两套系统,超级麻烦.故想在电脑上装上黑苹果的计划 相关配置地址:https: ...
- docker学习5--docker数据卷(volume)
https://blog.csdn.net/dream_broken/article/details/52314993 1.什么是数据卷volume 为了了解什么是Docker Volume,首先我们 ...
- 英语动画字母积木 Alphablocks 4季91集 自然拼读phonics 带字幕
BBC Cbeebies的Alphablocks声情并茂,是让孩子接触phonics自然拼读并产生拼读意识的一系列非常不错的动画片.跳跳蛙字母工厂Leap Frog_Letter Factory是美国 ...
- MD5加密解密类(asp.net)&使用MD5过时处理
加密类 #region ========加密======== /// <summary> /// 加密 /// </summary> /// <param name=&q ...
- java List<String> 转换成带逗号的字符串
使用commons-lang3-3.3.2.jar org.apache.commons.lang3.StringUtils.join(applyNameList, ",");
- 关于shared_ptr与weak_ptr的使用(good)
shared_ptr是带引用计数的智能指针,可以说大部分的情形选择用shared_ptr不会出问题.那么weak_ptr是什么,应该怎么用呢? weak_ptr也是智能指针,但是比较弱,感觉没什么用. ...
- IIS 错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
导致这种问题的原因是ASP.NET没有成功注册到IIS中,很有可能是先安装.Net Framework,然后安装IIS.为了避免此问题发生,要先安装IIS再安装.Net Framework. 解决方案 ...
- python自动化开发-[第十四天]-javascript(续)
今日概要: 1.数据类型 2.函数function 3.BOM 4.DOM 1.运算符 算术运算符: + - * / % ++ -- 比较运算符: > >= < <= != = ...
- Java抽象类、接口整理
抽象类 5.1抽象类产生(上标为A) 编写一个类时,会给该类定义一些方法,这些方法是用来描述功能和具体实现的方式,这些方法都有方法体 例如:一个图形类应该有周长的方法,但是不同的图形求周长方法不一样. ...