线段树区间更新维护最小值。。。记得下放标记。。。

如果线段树上的一个完整区间被修改,那么最小值和最大值增加相应的值后不变,

会改变是因为一部分改变而另外一部分没有改变所以维护一下就好。

询问的时候也要记得下放标记。。。

数据结构快忘了,贴个板。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5+; struct Seg
{
ll lazy;
ll Min;
}tr[maxn<<]; int a[maxn];
int n; #define lid (id<<1)
#define rid (id<<1|1) void build(int l = ,int r = n-,int id = )
{
if(l == r) { tr[id].Min = a[l]; return; }//tr[rt].lazy }
int mid = (l+r)>>, lc = lid, rc = rid;
build(l,mid,lc);
build(mid+,r,rc);
tr[id].Min = min(tr[lc].Min,tr[rc].Min);
} int ql,qr;
ll val; #define Modify(id,v) tr[id].lazy += v; tr[id].Min += v;
void updata(int l = ,int r = n-,int id = )
{
if(ql<=l&&r<=qr) { Modify(id,val) return; }
int mid = (l+r)>>, lc = lid, rc = rid;
if(tr[id].lazy){
ll &t = tr[id].lazy;
Modify(lc,t)
Modify(rc,t)
t = ;
}
if(ql<=mid){
updata(l,mid,lc);
}
if(qr>mid) {
updata(mid+,r,rc);
}
tr[id].Min = min(tr[lc].Min,tr[rc].Min);
} const ll INF = 0x3f3f3f3f3f3f3f3f; ll query(int l = ,int r = n-,int id = )
{
if(ql<=l&&r<=qr){
return tr[id].Min;
}
int mid = (l+r)>>,lc = lid, rc = rid;
if(tr[id].lazy){
ll &t = tr[id].lazy;
Modify(lc,t);
Modify(rc,t);
t = ;
}
ll ret = INF;
if(ql<=mid){
ret = min(ret,query(l,mid,lc));
}
if(qr>mid){
ret = min(ret,query(mid+,r,rc));
}
return ret;
} bool sscan_l(int &x,char *&s)
{
while(!isdigit(*s) && *s != '-'){
if(!*s) return false;
s++;
}
bool fg;
if(*s == '-') fg = true,x = ;
else x = *s-'',fg = false; while(s++,isdigit(*s)) x = x*+*s-'';
if(fg) x = -x;
return true;
} char Line[];
int main()
{
//freopen("in.txt","r",stdin);
scanf("%d",&n);
for(int i = ; i < n; i++) scanf("%d",a+i);
build();
int m; scanf("%d\n",&m);
while(m--){
gets(Line);
char *p = Line;
int num[], i;
for(i = ; i < ; i++ ){
if(!sscan_l(num[i],p)) break;
}
if(i == ){
int l = num[],r = num[];
if(l<=r) {
ql = l; qr = r;
printf("%I64d\n",query());
}else {
ql = ; qr = r;
ll ans = query();
ql = l; qr = n-;
ans = min(ans,query());
printf("%I64d\n",ans);
}
}else {
int l = num[], r = num[]; val = num[];
if(l<=r){
ql = l; qr = r;
updata();
}else {
ql = ; qr = r;
updata();
ql = l; qr = n-;
updata();
}
}
}
return ;
}

CodeForces 52C Circular RMQ (线段树)的更多相关文章

  1. [CodeForces 52C]Circular RMQ

    题目传送门 评分:省选/NOI-,难度:普及+/提高 这题真的和RMQ没有半点关系,只需要一个裸的线段树,连pushdown都不需要,只需要两种操作:区间修改和区间求最小值,在回溯时加上标记即可,唯一 ...

  2. CodeForces 52C Circular RMQ(间隔周期段树,间隔更新,间隔总和)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://codeforces.com/problemset/problem/52/C You are g ...

  3. NBU 2475 Survivors(RMQ线段树)

    NBU 2475Survivors 题目链接:http://acm.nbu.edu.cn/v1.0/Problems/Problem.php?pid=2475 题意:给定n个人,每个人有strengt ...

  4. Buses and People CodeForces 160E 三维偏序+线段树

    Buses and People CodeForces 160E 三维偏序+线段树 题意 给定 N 个三元组 (a,b,c),现有 M 个询问,每个询问给定一个三元组 (a',b',c'),求满足 a ...

  5. CodeForces 877E DFS序+线段树

    CodeForces 877E DFS序+线段树 题意 就是树上有n个点,然后每个点都有一盏灯,给出初始的状态,1表示亮,0表示不亮,然后有两种操作,第一种是get x,表示你需要输出x的子树和x本身 ...

  6. [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)

    [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...

  7. [Codeforces 1199D]Welfare State(线段树)

    [Codeforces 1199D]Welfare State(线段树) 题面 给出一个长度为n的序列,有q次操作,操作有2种 1.单点修改,把\(a_x\)修改成y 2.区间修改,把序列中值< ...

  8. [Codeforces 316E3]Summer Homework(线段树+斐波那契数列)

    [Codeforces 316E3]Summer Homework(线段树+斐波那契数列) 顺便安利一下这个博客,给了我很大启发(https://gaisaiyuno.github.io/) 题面 有 ...

  9. UESTC 764 失落的圣诞节 --RMQ/线段树

    题意:n种物品,每种物品对不同的人都有不同的价值,有三个人选,第一个为普通学生,第二个是集,第三个是祈,集和祈可以选一样的,并且还会获得加分,集和祈选的普通学生都不能选,问三个人怎样选才能使总分最高. ...

随机推荐

  1. Bind 远程连接出现rndc: connect failed: 192.168.1.66#953: connection refused

    远程连接IP地址为192.168.1.66的BIND DNS服务器,出现 rndc: connect failed: 192.168.1.66#953: connection refused 原因:1 ...

  2. 牛客多校3 C-Shuffle Cards(rope大法解决数组分块)

    Shuffle Cards 链接:https://www.nowcoder.com/acm/contest/141/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26 ...

  3. 使用tomcat作为容器安装Jenkins

    安装前准备环境:jdk,maven,tomcat jdk 参考centos安装jdk:https://www.cnblogs.com/pipiyan/p/10491876.html maven 已有安 ...

  4. tp5 搜索之后保留分页

    当接收到参数是执行搜索 public function index($name=null){ if (isset($_REQUEST['username'])) { $name = $_REQUEST ...

  5. 51nod1412(dp)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1412 代码: #include <bits/stdc+ ...

  6. codeforces986F Oppa Funcan Style Remastered【线性筛+最短路】

    容易看出是用质因数凑n 首先01个因数的情况可以特判,2个的情况就是ap1+bp2=n,b=n/p2(mod p1),这里的b是最小的特解,求出来看bp2<=n则有解,否则无解 然后剩下的情况最 ...

  7. 关于Mac系统中my sql 和navicat for mysql 的连接问题。

    我这个完完全全的技术小小白,经过数个小时的网搜,navicat for mysql和mysql终于可以可以正常连接了,好开森啊!,我把我遇到的问题,以及解决方法记录下来,希望也可以对遇到同样问题的能够 ...

  8. mysql错误之errorcode 1215问题

    1.此类问题出现时我们往往会迫不及待的去百度,但是问题偶尔也不是我们想的那样,比如我本次犯下的错误如下: 上图是我给表添加外键约束的时候的sql.下图是我建的表,问题出哪里了?原来是我的数据库根本没有 ...

  9. Jquery树形控件 $.fn.zTree.init

    https://www.cnblogs.com/jin-/p/4646202.html asp.net 树形控件 $.fn.zTree.init 在网页中通过jquery脚本来构筑树形控件将是一个不错 ...

  10. ASP.NET Core Linux

    环境说明 CentOS / 7.1 (64bit) (Linux操作系统) 3MySQL5.7(网站应用数据库) .NET Core SDK 2.0.0(网站应用环境) Nginx(反向代理服务器) ...