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

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

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

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

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

#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. 再论c#获取存储过程返回值(包括SqlSugar)

    其实这个问题好多年以前研究过: https://blog.csdn.net/xpnew/article/details/6909902 最近因为需要统计日结月结,给同事写了一套调用存储过程的代码.同时 ...

  2. 模板 - 动态规划 - 数位dp

    #include<bits/stdc++.h> using namespace std; #define ll long long ]; ll dp[][/*可能需要的状态2*/];//不 ...

  3. SCUT - 157 - CC和他的GCD - 容斥原理

    https://scut.online/p/157 鉴于多年(都没几个月)搞数论的经验,这种时候枚举g肯定是对的. 那么肯定是要莫比乌斯函数作为因子,因为很显然? 但是为什么要搞个负的呢?其实是因为这 ...

  4. Myeclipse如何使用自带git工具向远程仓库提交代码(转)

    Myeclipse如何使用自带git工具向远程仓库提交代码 第一步:将改动的代码标记 项目右键:team->synchronize workspace 点击确定 项目右键>add to g ...

  5. 字节码操作-Javaassist

    下面就是一个具体的demo来介绍利用Javaassist库来创建类,不过要先在工程里面导入Javaassist的架包, package JavaAasist; import java.lang.ref ...

  6. How to use unity CreateExternalTexture on Android?

    http://stackoverflow.com/questions/33324753/how-to-use-unity-createexternaltexture-on-android Can so ...

  7. fatal pylint error : ......can't find '__main__'module in

    fatal pylint error : ......can't find '__main__'module in原因是没有安装pylint,所以提示没有找到__main__模块 解决方案:1.到官网 ...

  8. PAT甲级——1106 Lowest Price in Supply Chain(BFS)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90444872 1106 Lowest Price in Supp ...

  9. python所有的魔术方法

    据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个, ...

  10. 蓝桥校内选拔赛B题(不一定正确)

    由于没报名,只能靠别人发的截图来做了 我的思路:全排列,判断加号位置,判断/位置,看是否存在这个相等的 时间复杂度较高,在10e8左右 代码: #include<cstdio> #incl ...