Write a program which manipulates a sequence AA = {a_0, a_1, ..., a_{n-1}a0​,a1​,...,an−1​} with the following operations:

  • add(s, t, x)add(s,t,x) : add xx to a_s, a_{s+1}, ..., a_tas​,as+1​,...,at​.
  • find(s, t)find(s,t) : report the minimum value in a_s, a_{s+1}, ..., a_tas​,as+1​,...,at​.

Note that the initial values of a_i ( i = 0, 1, ..., n-1 )ai​(i=0,1,...,n−1) are 0.

Input

nn qq
query_1query1​
query_2query2​
:
query_qqueryq​

In the first line, nn (the number of elements in AA) and qq (the number of queries) are given. Then, iith query query_iqueryi​ is given in the following format:

0 ss tt xx

or

1 ss tt

The first digit represents the type of the query. '0' denotes add(s, t, x)add(s,t,x) and '1' denotes find(s, t)find(s,t).

Output

For each findfind query, print the minimum value.

Constraints

  • 1 ≤ n ≤ 1000001≤n≤100000
  • 1 ≤ q ≤ 1000001≤q≤100000
  • 0 ≤ s ≤ t < n0≤s≤t<n
  • -1000 ≤ x ≤ 1000−1000≤x≤1000

Sample Input 1

6 7
0 1 3 1
0 2 4 -2
1 0 5
1 0 1
0 3 5 3
1 3 4
1 0 5

Sample Output 1

-2
0
1
-1

#include <iostream>
#include <cmath>
using namespace std;
#define ll long long
#define inf 1e31+5
const int N=1e5+5;
ll a[N];
struct node{int l,r;ll lazy;ll minn;} tr[N<<2];//维护
void pushup(int u)
{tr[u].minn=min(tr[u<<1].minn,tr[u<<1|1].minn);} //建树void build(int u,int l,int r){tr[u].l=l;tr[u].r=r;tr[u].lazy=0;if(l==r){tr[u].minn=a[l];return ;}int mid=l+r>>1;build(u<<1,l,mid);build(u<<1|1,mid+1,r);pushup(u);}
void pushdown(int u)
{if(tr[u].lazy){tr[u<<1].lazy+=tr[u].lazy;tr[u<<1].minn=tr[u<<1].minn+tr[u].lazy;tr[u<<1|1].lazy+=tr[u].lazy;tr[u<<1|1].minn=tr[u].lazy+tr[u<<1|1].minn;tr[u].lazy=0;}
}
//区间修改
void modify(int u,int l,int r,ll k)
{if(l<=tr[u].l&&r>=tr[u].r){tr[u].lazy+=k;tr[u].minn=k+tr[u].minn;return;}pushdown(u);int mid=tr[u].l+tr[u].r>>1;if(l<=mid)modify(u<<1,l,r,k);if(r>mid)modify(u<<1|1,l,r,k);pushup(u);} //区间查询ll query(int u,int l,int r){if(l<=tr[u].l&&r>=tr[u].r){return tr[u].minn;}pushdown(u);int mid=tr[u].l+tr[u].r>>1;ll res=inf;if(l<=mid){res=min(res,query(u<<1,l,r));}if(r>mid){res=min(res,query(u<<1|1,l,r));}return res;} int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);int n,m;cin>>n>>m;for(int i=1;i<=n+5;i++){a[i]=0;}build(1,1,n);for(int i=1;i<=m;i++){int t;cin>>t;if(t==0){int l,r;ll k;cin>>l>>r>>k;modify(1,l+1,r+1,k);//注意下标从1开始}else{int l,r;cin>>l>>r;cout<<query(1,l+1,r+1)<<endl;}}}

G - RMQ and RAQ (cugb2023-s)相关推荐

  1. 文件上传之伪Ajax方式上传

    From: <由 Windows Internet Explorer 8 保存> Subject: =?gb2312?B?zsS8/snPtKvWrs6xQWpheLe9yr3Jz7SrI ...

  2. 2019 ICPC银川区域赛 G - Pot!!(线段树维护动态RMQ)

    传送门 题目大意 若ppp为质数,定义potp(n)pot_p(n)potp​(n)为nnn分解质因数ppp的指数.给定一个初始全为111的序列aaa,有两种操作: MULTIPLY l r:将区间[ ...

  3. 2017广东工业大学程序设计竞赛决赛 题解源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)...

    心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起&qu ...

  4. LCA 最近公共祖先(RMQ、树上倍增、Tarjan),树上两点距离,线段重合长度

    对于LCA的一些理解 RMQ dfs处理树 对于一个树形结构,可以用dfs将一颗树转化成数组,数组中记录每个点的标号,这样数组就按照dfs的顺序把树存了下来 确定祖先的范围 对于询问的节点X和Y, X ...

  5. HDU3183 A Magic Lamp —— 贪心(单调队列优化)/ RMQ / 线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183 题解: 方法一:贪心. 在草稿纸上试多几次可以知道,删除数字中从左到右最后一位递增(可以等于)的 ...

  6. 线段树/扫描线问卷调查反馈——Rmq Problem / mex(主席树),Boring Queries(二分+st表+主席树),Colorful Squares(扫描线)

    文章目录 Rmq Problem / mex Boring Queries Colorful Squares Rmq Problem / mex luogu4137 对aia_iai​建权值线段树 再 ...

  7. AC日记——Periodic RMQ Problem codeforces 803G

    G - Periodic RMQ Problem 思路: 题目给一段序列,然后序列复制很多次: 维护序列很多次后的性质: 线段树动态开点: 来,上代码: #include <cstdio> ...

  8. dfs序 + RMQ = LCA

    dfs序是指你用dfs遍历一棵树时,每个节点会按照遍历到的先后顺序得到一个序号.然后你用这些序号,可以把整个遍历过程表示出来. 如上图所示,则整个遍历过程为1 2 3 2 4 5 4 6 4 2 1 ...

  9. 线性结构 —— ST 表与 RMQ

    [概述] RMQ(Range Minimum/Maximum Query),是对于长度为 n 的数列 A,回答若干次询问 RMQ(i,j),返回数列 A 中下标在区间 [i,j] 中的最值,即:区间最 ...

最新文章

  1. C++ 枚举类型介绍
  2. Exchange 2016 證書無效如何處理?
  3. Ubuntu中Vim 中文乱码解决方法
  4. JS判断是否出现滚动条
  5. 今天JKS挂了,记录一下手动发云机上流程
  6. Spring - Java/J2EE Application Framework 应用框架 第 17 章 使用Spring邮件抽象层发送Email
  7. SpringMVC+RestFul详细示例实战教程
  8. 仿QQ联系人的TableView的折叠与拉伸
  9. acid(数据库事务正确执行的四个基本要素的缩写)
  10. php如何数字转字符串,php如何实现数字转字符串
  11. mysql dns反说明的成绩
  12. Mac电脑共享“公共文件夹”以外的文件夹的设置教程
  13. linux nginx安装https安全证书
  14. TCP/IP中的TTL
  15. 快速傅里叶变换使用方法
  16. 川崎机器人 AS语言基础运动指令表
  17. 如何在cmd中,使用cd进入指定文件目录
  18. 【优化算法】莱维飞行和随机游动策略的灰狼算法【含Matlab源码 1500期】
  19. 《Spring揭秘》读后感(给你们强烈安利这本书)
  20. java 数组元素查找_Java在数组中查找指定元素的方法

热门文章

  1. PTX-PEG-TCO 紫杉醇-聚乙二醇-反式环辛烯
  2. 傅里叶变换、离散傅里叶变换(DFT)、快速傅里叶变换(FFT)详解
  3. MAC电脑删除系统自带的软件
  4. 如何画一个精致的思维导图
  5. 【KVM相关】kvm虚拟化部署配置
  6. 10个自学编程的学习网站和论坛,都是常去逛的干货网站社区
  7. 一款vista边栏Gadgets汉英翻译(翻译14种语言的边栏工具下载)
  8. CF545C题解【贪心】
  9. 转载几篇别人写的皮肤类控件的技术文章
  10. 在SAR-Opt数据融合领域针对深度学习的SEN1-2数据集