[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 ...
随机推荐
- Dubbo源码学习总结系列三 dubbo-cluster集群模块
Dubbo集群模块的目的是将集群Invokers构造一个透明的Invoker对象,其中包含了容错机制.负载均衡.目录服务(服务地址集合).路由机制等,为RPC层提供高可用.高并发.自动发现.可治理的S ...
- 一、bootstrap-upload
一.bootstrap-upload 前端代码: @{ Layout = null; } <!DOCTYPE html> <html lang="zh-CN"&g ...
- 【Kickstart】2018 Round (Practice ~ C)
Practice Round Problem A GBus count (9pt/15pt) (2019年1月14日,kickstart群每日一题) 题意:有一条笔直的大路,上面有城市编号从 1 开始 ...
- jmeter post请求在终端传参,并且指定请求参数文件
命令:jmeter -n -t jmeter_1.jmx -l report/report30.jtl -Jnum=3000 -e -o webresult/3000result ...
- Java 逻辑运算符相关解析
问:定简单说说 Java 中 & 与 && 有什么区别?| 与 || 呢? 答:& 是位运算符,&& 是布尔逻辑运算符,| 与 || 类似同理.在进行逻 ...
- 带你一文搞定 IO 流相关核心问题
问:简单谈谈 Java IO 流各实现类的特性? 答:java.io 包下面的流基本都是装饰器模式的实现,提供了各种类型流操作的便携性,常见的流分类如下. 以二进制字节方式读写的流: InputStr ...
- flask之路径与函数的映射
一:运行报错 OSError: [Errno 98] Address already in use:5000端口可能被占 lsof -i:端口号 查看端口被那个进程使用,结果是python3.5 k ...
- 测试tensorflowgpu版本是否可用
输入一下代码即可 import tensorflow as tf print(tf.test.is_gpu_available())
- pytorch 指定GPU训练
# 1: torch.cuda.set_device(1) # 2: device = torch.device("cuda:1") # 3:(官方推荐)import os os. ...
- jenkins解决python不是内部命令
1.在 Windows 提示符下运行是没有问题. 2.把Jenkins项目配置中 python main.py 修改成python可执行文件全路径:D:\Python35\python.exe m ...