九度oj 1407 快速找出最小数

时间:2022-09-02 10:17:47

原题链接:http://ac.jobdu.com/problem.php?pid=1407 
线段树,区间更新,查询区间最小值。

注意区间更新,查询的时候,区间$\begin{align*}[L,R] \end{align*}$$\begin{align*}L \end{align*}$都可能大于$\begin{align*}R\end{align*}$。。

有个地方写sb了害的我wa了好几次%>_<%。

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#define lc root<<1
#define rc root<<1|1
#define mid ((l+r)>>1)
using std::min;
const int Max_N = ;
const int INF = ~0u >> ;
struct Node {
int val, add;
};
struct SegTree {
Node seg[Max_N << ];
inline void push_up(int root) {
seg[root].val = min(seg[lc].val, seg[rc].val);
}
inline void built(int root, int l, int r) {
seg[root].add = ;
if (l == r) {
scanf("%d", &seg[root].val);
return;
}
built(lc, l, mid);
built(rc, mid + , r);
push_up(root);
}
inline void push_down(int root) {
if (seg[root].add != ) {
int &_add = seg[root].add;
seg[lc].add += _add;
seg[lc].val += _add;
seg[rc].add += _add;
seg[rc].val += _add;
_add = ;
}
}
inline void update(int root, int l, int r, int x, int y, int v) {
if (x > r || y < l) return;
if (x <= l && y >= r) {
seg[root].add += v;
seg[root].val += v;
return;
}
push_down(root);
update(lc, l, mid, x, y, v);
update(rc, mid + , r, x, y, v);
push_up(root);
}
inline int query(int root, int l, int r, int x, int y) {
if (x > r || y < l) return INF;
if (x <= l && y >= r) return seg[root].val;
push_down(root);
int v1 = query(lc, l, mid, x, y);
int v2 = query(rc, mid + , r, x, y);
return min(v1, v2);
}
}seg;
int main() {
#ifdef LOCAL
freopen("in.txt", "r", stdin);
freopen("out.txt", "w+", stdout);
#endif
char buf[];
int n, m, a, b, c;
while (~scanf("%d", &n)) {
seg.built(, , n);
scanf("%d\n", &m);
while (m--) {
gets(buf);
char *p = strchr(buf, ' ');
if (strchr(++p, ' ')) {
sscanf(buf, "%d %d %d", &a, &b, &c);
if (a <= b) {
seg.update(, , n, ++a, ++b, c);
} else {
seg.update(, , n, ++a, n, c);
seg.update(, , n, , ++b, c);
}
} else {
sscanf(buf, "%d %d", &a, &b);
if (a <= b) {
printf("%d\n", seg.query(, , n, ++a, ++b));
} else {
int v1 = seg.query(, , n, ++a, n);
int v2 = seg.query(, , n, , ++b);
printf("%d\n", min(v1, v2));
}
}
}
}
return ;
}

九度oj 1407 快速找出最小数的更多相关文章

  1. 九度OJ 1256:找出两个只出现了一次的数字 (位运算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:568 解决:186 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输入: 输入的 ...

  2. 九度OJ 1035:找出直系亲属 (二叉树、递归)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2380 解决:934 题目描述:     如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外) ...

  3. 九度OJ 1199:找位置 (计数)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2083 解决:1010 题目描述: 对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 输出:a,1:a,4 ...

  4. 九度OJ 1170:找最小数 (最值)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6451 解决:2843 题目描述: 第一行输入一个数n,1 <= n <= 1000,下面输入n行数据,每一行有两个数,分别是x ...

  5. 九度OJ 1053:互换最大最小数 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6613 解决:2676 题目描述: 输入一个数n,然后输入n个数值各不相同,调换数组中最大和最小的两个数,然后输出. 输入: 测试数据有多组 ...

  6. 九度OJ 1052:找x (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7335 解决:3801 题目描述: 输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数 ...

  7. 【九度OJ】题目1170:找最小数 解题报告

    [九度OJ]题目1170:找最小数 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1170 题目描述: 第一行输入一个数n,1 &lt ...

  8. 【九度OJ】题目1199:找位置 解题报告

    [九度OJ]题目1199:找位置 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1199 题目描述: 对给定的一个字符串,找出有重复的 ...

  9. 【九度OJ】题目1052:找x 解题报告

    [九度OJ]题目1052:找x 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1052 题目描述: 输入一个数n ...

随机推荐

  1. Android LayoutInflater&amp&semi;LayoutInflaterCompat源码解析

    本文分析版本: Android API 23,v4基于 23.2.1 1 简介 实例化布局的XML文件成相应的View对象.它不能被直接使用,应该使用getLayoutInflater()或getSy ...

  2. UVA 10131 - Is Bigger Smarter&quest; &lpar;动态规划)

    Is Bigger Smarter? The Problem Some people think that the bigger an elephant is, the smarter it is. ...

  3. linux里的bootproto的none&comma;static&comma;dhcp有什么区别

      这个是网络配置参数:BOOTPROTO=static 静态IP BOOTPROTO=dhcp 动态IP BOOTPROTO=none 无(不指定)通常情况下是dhcp或者static,通过指定方式 ...

  4. 迭代器Iteration

    定义: 可以被next()调用并不断返回下一个值的对象成为迭代器Iterator 与可迭代(Iterable)的区别: Iterable定义为:凡是作用于for循环的对象.比如list(),dict{ ...

  5. quartzJob 例子

    KpiOfPoorQualityJob.javapackage com.eastcom_sw.inas.workorder.quartzJob.kpi; import net.sf.json.JSON ...

  6. Bootstrap3 栅格系统-媒体查询

    在栅格系统中,我们在 Less 文件中使用以下媒体查询(media query)来创建关键的分界点阈值. /* 超小屏幕(手机,小于 768px) */ /* 没有任何媒体查询相关的代码,因为这在 B ...

  7. UE4成批处理透明材质

    项目中需要控制成批的物体的透明度,但是默认的时候他又不能是透明的,对,项目的要求就这么诡异. 然而却没有找到设置材质的BlendMode的功能,于是只有换了一种办法,物体需要透明时更换为透明材质,默认 ...

  8. Vue(三十二)SSR服务端渲染Nuxt&period;js

    初始化Nuxt.js项目步骤 1.使用脚手架工具 create-nuxt-app 创建Nuxt项目 使用yarn或者npm $ yarn create nuxt-app <项目名> 注:根 ...

  9. java-redis

    pom.xml添加如下配置: <dependency> <groupId>org.springframework.boot</groupId> <artifa ...

  10. vsphere client 创建虚拟机 如何关联到本地iso文件

    问题:以前用过vmere 创建虚拟机,都要在虚拟机启动之前配置系统镜像文件,第一次使用vspere client时在创建虚拟机后,我就想着应该先配置,再启动,其实,非也,应该这样,先启动虚拟机,在点按 ...