因为题中的操作是区间加法,所以满足前缀相减性.

而每一次查询的时候还是单点查询,所以直接用可持久化线段树维护差分数组,然后查一个前缀和就行了.

code:

#include <bits/stdc++.h>
#define N 200004
#define LL long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,m,q,tot,rt[N];
LL val[N];
int newnode() { return ++tot; }
struct node { int ls,rs; LL sum;}t[N*50];
void build(int &now,int l,int r)
{
now=newnode();
if(l==r) return ;
int mid=(l+r)>>1;
if(l<=mid) build(t[now].ls,l,mid);
if(r>mid) build(t[now].rs,mid+1,r); }
int update(int p,int l,int r,int pos,int v)
{
int now=newnode();
t[now]=t[p];
t[now].sum=t[p].sum+1ll*v;
if(l==r) return now;
int mid=(l+r)>>1;
if(pos<=mid) t[now].ls=update(t[p].ls,l,mid,pos,v);
else t[now].rs=update(t[p].rs,mid+1,r,pos,v);
return now;
}
LL query(int now,int l,int r,int L,int R)
{
if(!now) return 0;
if(l>=L&&r<=R) return t[now].sum;
int mid=(l+r)>>1;
LL re=0ll;
if(L<=mid) re+=query(t[now].ls,l,mid,L,R);
if(R>mid) re+=query(t[now].rs,mid+1,r,L,R);
return re;
}
int main()
{
// setIO("input");
int i,j;
scanf("%d%d%d",&n,&m,&q);
for(i=1;i<=n;++i) scanf("%lld",&val[i]);
build(rt[0],1,n);
for(i=1;i<=m;++i)
{
int l,r,h;
scanf("%d%d%d",&l,&r,&h);
rt[i]=update(rt[i-1],1,n,l,h);
if(r<n) rt[i]=update(rt[i],1,n,r+1,-h);
}
for(i=1;i<=q;++i)
{
int opt;
scanf("%d",&opt);
if(opt==1)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
LL L=query(rt[x-1],1,n,1,z);
LL R=query(rt[y],1,n,1,z);
printf("%lld\n",R-L+val[z]);
}
else
{
int pos,p;
scanf("%d%d",&pos,&p);
val[pos]=1ll*p;
}
}
return 0;
}

  

luogu T96516 [DBOI2019]持盾 可持久化线段树+查分的更多相关文章

  1. luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树)(主席树)

    luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目 #include<iostream> #include<cstdlib> #include< ...

  2. Luogu P3919 【模板】可持久化数组 可持久化线段树

    其实就是可持久化线段树的模板题线段树不会看这里 #include<bits/stdc++.h> ; using namespace std; ]; ],rc[N*],val[N*],cnt ...

  3. 主席树||可持久化线段树+离散化 || 莫队+分块 ||BZOJ 3585: mex || Luogu P4137 Rmq Problem / mex

    题面:Rmq Problem / mex 题解: 先离散化,然后插一堆空白,大体就是如果(对于以a.data<b.data排序后的A)A[i-1].data+1!=A[i].data,则插一个空 ...

  4. Luogu P3919【模板】可持久化数组(可持久化线段树/平衡树)

    题面:[模板]可持久化数组(可持久化线段树/平衡树) 不知道说啥,总之我挺喜欢自己打的板子的! #include<cstdio> #include<cstring> #incl ...

  5. 【Luogu P3834】可持久化数组(可持久化线段树)

    题目链接 可持久化线段树模板题. 这里总结一下可持久化线段树. 可持久化数据结构就是能恢复历史状态的数据结构,比如可持久化\(Trie\),并查集,平衡树. 可持久化数组是最基础的,这里通过可持久化线 ...

  6. 洛谷P3834 [模板]可持久化线段树1(主席树) [主席树]

    题目传送门 可持久化线段树1(主席树) 题目背景 这是个非常经典的主席树入门题——静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个正整数构成的序列,将对于指定 ...

  7. 【洛谷P3834】(模板)可持久化线段树 1(主席树)

    [模板]可持久化线段树 1(主席树) https://www.luogu.org/problemnew/show/P3834 主席树支持历史查询,空间复杂度为O(nlogn),需要动态开点 本题用一个 ...

  8. 【可持久化线段树?!】rope史上最全详解

    https://www.luogu.org/problemnew/show/P3919 看到上面链接中的题时,我在学会可持久化线段树的同时,第一次学会了一个非常屌(cai)的STL大法——rope!! ...

  9. 区间第K小——可持久化线段树模板

    概念 可持久化线段树又叫主席树,之所以叫主席树是因为这东西是fotile主席创建出来的. 可持久化数据结构思想,就是保留整个操作的历史,即,对一个线段树进行操作之后,保留访问操作前的线段树的能力. 最 ...

随机推荐

  1. Java -- 最简单的认识重载

    定义 方法的名称相同,参数个数或类型不同的时候就成为方法重载. 示例 编写一个两个数相加的方法: public class hello{ public static void main(String ...

  2. 3.01定义常量之define

    [注:本程序验证是使用vs2013版] #include <stdio.h> #include <stdlib.h> #include <string.h> #pr ...

  3. 缺陷的背后(四)---多进程之for循环下fork子进程引发bug

    导语 业务模块为实现高并发时的更快的处理速度,经常会采用多进程的方式去处理业务.多进程模式下常见的三种bug:for循环下fork子进程导致产生无数孙子进程,僵尸进程,接口窜包.本章主要介绍第一种常见 ...

  4. Python接口自动化基础---post请求

    常见的post传递参数的类型有以下两种: 第一种:application/x-www-form-urlencoded,浏览器原生的form表单,格式如下:input1=xxx&input2=o ...

  5. bat 设置多个静态ip

    @echo off REM 本地连接名称 set NetName="本地连接 2" REM 默认IP netsh interface ipv4 set address name=% ...

  6. 【洛谷 P4302】 [SCOI2003]字符串折叠(DP)

    题目链接 简单区间dp 令\(f[i][j]\)表示\([i,j]\)的最短长度 先枚举区间,然后在区间中枚举长度\(k\),看这个区间能不能折叠成几个长度为\(k\)的,如果能就更新答案. #inc ...

  7. dubbo源码阅读之服务目录

    服务目录 服务目录对应的接口是Directory,这个接口里主要的方法是 List<Invoker<T>> list(Invocation invocation) throws ...

  8. iOS-右滑返回,利用Runtime添加全屏Pop手势

    项目中经常会遇到类似需求,需要在某控制器增加全屏右滑返回功能. 在我们不隐藏 NavigationBar 的前提下,系统会自动替我增加此功能,只是它作用的范围仅仅在屏幕左边有限区域. 我们需要在整个界 ...

  9. Javap与JVM指令

    一.javap命令简述 javap是jdk自带的反解析工具.它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令).本地变量表.异常表和代码行偏移量映射表.常量池等等信息.当 ...

  10. vue 生命周期的详解

    一.vue生命周期的解析 > 1>什么是vue生命周期 每个vue实例在被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期.详细来说,就是Vue实例从开始创建,初始化数据, ...