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

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

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

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

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

#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. OSP 与 Session

    大家都知道,OSP是不支持session的,换句话说,登录有效期是永久的.一般网站,如果你不操作一段时间以后,必须重新登录.osp不是这样的,你一旦登录后,即便服务器重启了,你依然能访问服务器并不需要 ...

  2. HDU - 5451 Best Solver(循环节+矩阵快速幂)

    Best Solver The so-called best problem solver can easily solve this problem, with his/her childhood ...

  3. C#Timer停不住

    System.Timers.Timer timer1 = new System.Timers.Timer(); timer1.Interval = ; //1天循环一次 timer1.Elapsed ...

  4. tp5 搜索之后保留分页

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

  5. PHP RSA算法 HMAC-SHA1加密算法

    HMAC-SHA1加密算法 function getSignature($str, $key) { $signature = ""; if (function_exists('ha ...

  6. 有关xerosploit运行报错问题的有效解决方案

    [安装xerosploit]安装xerosploit的步骤如下,我是将xerosploit直接克隆到了根目录下(使用“cd /”到达根目录) git clone https://github.com/ ...

  7. com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: INSTALL_FAILED_ABORTED: User rejected permissions

    原因是连接了两个设备,所以无法启动,关掉一个即可

  8. shell学习(9)- du和df区别及详解

    清明小长假来加班,总得干点啥吧,今天就说说du 和df的区别. 1.区别 du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有删除的.他计算 ...

  9. CodeForces - 796B-Find The Bone(模拟)

    Zane the wizard is going to perform a magic show shuffling the cups. There are n cups, numbered from ...

  10. hdu5884

    #include <cstdio> #include <queue> #include <algorithm> #include <string.h> ...