[CodeForces 52C]Circular RMQ
评分:省选/NOI-,难度:普及+/提高
这题真的和RMQ没有半点关系,只需要一个裸的线段树,连pushdown都不需要,只需要两种操作:区间修改和区间求最小值,在回溯时加上标记即可,唯一有点思维含量的是对环的处理,如果左端点大于了右端点,就维护(l,n)(1,r),否则正常维护即可,不知道线段树怎么打的可以看我的博客:线段树
下面给出参考代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct node
{
long long l,r,w,tag;
}tree[];
long long n,m,q,x,y,k,ans;
void build(long long l,long long r,long long k)
{
tree[k].l=l;tree[k].r=r;
if(l==r)
{
scanf("%lld",&tree[k].w);
return;
}
long long mid=(l+r)/;
build(l,mid,k*);
build(mid+,r,k*+);
tree[k].w=min(tree[k*].w,tree[k*+].w);
}
void add(long long k,long long w,long long ll,long long rr)
{
long long l=tree[k].l,r=tree[k].r;
if(l>=ll&&r<=rr)
{
tree[k].tag+=w;
return;
}
//cout<<k<<" "<<l<<" "<<r<<endl;
long long mid=(l+r)/;
//cout<<x<<" "<<y<<endl;
if(ll<=mid)add(k*,w,ll,rr);
if(rr>mid)add(k*+,w,ll,rr);
tree[k].w=min(tree[k*].w+tree[k*].tag,tree[k*+].w+tree[k*+].tag);
return;
}
long long query(long long k,long long ll,long long rr)
{
if(tree[k].l>=ll&&tree[k].r<=rr)
{
return tree[k].w+tree[k].tag;
}
if(tree[k].l>rr||tree[k].r<ll)
{
return ;
}
long long mid=(tree[k].l+tree[k].r)/,lc,rc;
lc=query(k*,ll,rr);
rc=query(k*+,ll,rr);
return min(lc,rc)+tree[k].tag;
}
int main()
{
cin>>n;
build(,n,);
cin>>m;
for(long long i=;i<=m;i++)
{
cin>>x>>y;
x++;y++;
char c=getchar();
if(c=='\n')
{
//4 1
ans=;
if(x>y)cout<<min(query(,x,n),query(,,y));
else cout<<query(,x,y);
cout<<endl;
}
else
{
cin>>q;
if(x>y)add(,q,x,n),add(,q,,y);
else add(,q,x,y);
}
}
return ;
}
[CodeForces 52C]Circular RMQ的更多相关文章
- CodeForces 52C Circular RMQ(间隔周期段树,间隔更新,间隔总和)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://codeforces.com/problemset/problem/52/C You are g ...
- CodeForces 52C Circular RMQ (线段树)
线段树区间更新维护最小值...记得下放标记... 如果线段树上的一个完整区间被修改,那么最小值和最大值增加相应的值后不变, 会改变是因为一部分改变而另外一部分没有改变所以维护一下就好. 询问的时候也要 ...
- codeforces 803G Periodic RMQ Problem
codeforces 803G Periodic RMQ Problem 题意 长度为\(1e5\)的数组复制\(1e4\)次,对新的数组进行区间覆盖和区间最小值查询两种操作,操作次数\(1e5\). ...
- 「CF52C」Circular RMQ
更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description You are given circular array \(a_0, a_ ...
- CF#52 C Circular RMQ (线段树区间更新)
Description You are given circular array a0, a1, ..., an - 1. There are two types of operations with ...
- Codeforces 803G Periodic RMQ Problem 线段树
Periodic RMQ Problem 动态开点线段树直接搞, 我把它分成两部分, 一部分是原来树上的, 一部分是后来染上去的,两个部分取最小值. 感觉有点难写.. #include<bits ...
- 【CF52C】Circular RMQ(线段树区间加减,区间最值)
给定一个循环数组a0, a1, a2, …, an-1,现在对他们有两个操作: Inc(le, ri, v):表示区间[le, ri]范围的数值增加v Rmq(le, ri):表示询问区间[le, r ...
- codeforces 873E(枚举+rmq)
题意 有n(n<=3000)个人参与acm比赛,每个人都有一个解题数,现在要决定拿金牌的人数cnt1,拿银牌的人数cnt2,拿铜牌的人数cnt3,各自对应一个解题数区间[d1,c1],[d2,c ...
- Codeforces 803G Periodic RMQ Problem ST表+动态开节点线段树
思路: (我也不知道这是不是正解) ST表预处理出来原数列的两点之间的min 再搞一个动态开节点线段树 节点记录ans 和标记 lazy=-1 当前节点的ans可用 lazy=0 没被覆盖过 els ...
随机推荐
- em、rpx和px的换算
rpx:对于小程序开发,所用的单位都是rpx,而不论哪个型号的手机,屏幕宽度都是750rpxrpx与px的转换,根据设计稿换算例如:设计稿750px宽度,ps上量出或者标出的宽度是多少,那么就定义多少 ...
- Python之列表、元组、字典、集合及字符串的详细使用
1.列表 列表相当与C++中的数组,是有序的项目, 通过索引进行查找,但使用起来却方便很多,具体的操作看代码,自己实践一次就非常简单了. 注:列表一般用中括号“[ ]” #列表(数组) name_li ...
- java 生成时机时间
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; public class t ...
- [POJ3417]Network(LCA,树上差分)
Network Description Yixght is a manager of the company called SzqNetwork(SN). Now she's very worried ...
- php7 mysqli连接mysql的几种方式
一.过程是方法 function connect(){ static $conn; if(!$conn){ $conn = mysqli_connect(DB_HOST,DB_USER,DB_PWD) ...
- crt无法修改背景
当会话选项 里面的终端类型选择为Linux时,是无法修改外观颜色方案的.可以选择为vt100,就可以修改颜色了
- [POJ1772] Substract
问题描述 We are given a sequence of N positive integers a = [a1, a2, ..., aN] on which we can perform co ...
- Task2.设立计算图并自动计算
1.numpy和pytorch实现梯度下降法 import numpy as np # N is batch size; N, D_in, H, D_out = 64, 1000, 100, 10 # ...
- 021:自定义path(或url)转换器
1.实现如下需求:用户可以根据articles/list/方式获取文章,其中文章分类是采用如下分类,实例如下: 第一种:获取python分类下的文章:/article/python/ 第二种:获取py ...
- Centos中文语言乱码解决方法
vim /etc/locale.conf 添加:LANG="zh_CN.UTF-8" 执行一下source /etc/locale.conf,使刚修改的文件生效