洛谷 P1816 忠诚题解
题目描述
老管家是一个聪明能干的人。他为财主工作了整整10年,财主为了让自已账目更加清楚。要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意。但是由于一些人的挑拨,财主还是对管家产生了怀疑。于是他决定用一种特别的方法来判断管家的忠诚,他把每次的账目按1,2,3…编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作假他总是一次问多个问题。
输入格式
输入中第一行有两个数m,n表示有m(m<=100000)笔账,n表示有n个问题,n<=100000。
第二行为m个数,分别是账目的钱数
后面n行分别是n个问题,每行有2个数字说明开始结束的账目编号。
输出格式
输出文件中为每个问题的答案。具体查看样例。
输入输出样例
10 3
1 2 3 4 5 6 7 8 9 10
2 7
3 9
1 10
2 3 1
题解
这是一道线段树的模板题目。我参考的线段树模板来自:https://baijiahao.baidu.com/s?id=1605870136961096251&wfr=spider&for=pc。原来的模板是线段区间求和,现在改为区间求最小值。
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
#define ll long long const int MAXN = ; using namespace std; ll n, m, a[MAXN], ans[MAXN<<], tag[MAXN<<]; ll ls(ll x)
{
return x<<;
} ll rs(ll x)
{
return x<<|;
} void push_up(ll p)
{
ans[p] = min(ans[ls(p)], ans[rs(p)]);
} void build(ll p, ll l, ll r)
{
tag[p] = ;
if(l == r)
{
ans[p] = a[l];
return;
}
ll mid = (l + r) >> ;
build(ls(p), l, mid);
build(rs(p), mid + , r);
push_up(p);
} void f(ll p, ll l, ll r, ll k)
{
tag[p] = tag[p] + k;
ans[p] = ans[p] + k * (r - l + );
} void push_down(ll p, ll l, ll r)
{
ll mid = (l + r)>>;
f(ls(p), l, mid, tag[p]);
f(rs(p), mid + , r, tag[p]);
tag[p] = ;
} ll query(ll q_x, ll q_y, ll l, ll r, ll p)
{
ll res = ;
if(q_x <= l && r <= q_y)
{
return ans[p];
}
ll mid = (l + r)>>;
push_down(p, l, r);
if(q_x <= mid)
{
res = min(res, query(q_x, q_y, l, mid, ls(p)));
}
if(q_y > mid)
{
res = min(res, query(q_x, q_y, mid + , r, rs(p)));
}
return res;
} int main()
{
ll e, f;
scanf("%lld%lld", &n, &m);
for(ll i = ; i <= n; i++)
{
scanf("%lld", &a[i]);
}
build(, , n);
for(ll i = ; i <= m; i++)
{
scanf("%lld%lld", &e, &f);
printf("%lld ", query(e, f, , n, ));
}
return ;
}
洛谷 P1816 忠诚题解的更多相关文章
- 洛谷P1816 忠诚 题解
洛谷P1816 忠诚 题解 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人 ...
- 洛谷 P1816 忠诚 题解
P1816 忠诚 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财 ...
- 洛谷P1816 忠诚
P1816 忠诚 569通过 1.5K提交 题目提供者该用户不存在 标签云端 难度普及+/提高 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 主席树的常数貌似大于线段树… TL ...
- 【模板】ST表 洛谷P1816 忠诚
P1816 忠诚 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于 管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨, ...
- 洛谷——P1816 忠诚
https://www.luogu.org/problem/show?pid=1816#sub 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记 ...
- 洛谷 P1816 忠诚 ST函数
题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...
- 【洛谷P1816 忠诚】线段树
题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...
- 洛谷 P1816 忠诚
https://www.luogu.org/problemnew/show/1816 st表模板 #include<cstdio> #include<algorithm> us ...
- 洛谷P1816 忠诚 分块
分块真的是很暴力呀… 暴力查询左端,暴力查询又端点,中间整体部分直接 $O(1)$ 求出. 注意编程细节:belong[i]=(i−1)/block+1,这样可以保证序列被分成这样的: Code: # ...
随机推荐
- Qt之如何自定义model
Qt之如何自定义model https://blog.csdn.net/wei375653972/article/details/86592209
- 1-3docker commit定制镜像
以定制⼀个 Web 服务器为例⼦ 1.commit定制镜像 docker pull nginx:1.17 运行容器 --name:容器名字 -d:后台 -p本地端口:容器内端口 docker ru ...
- mybatis批量新增或更新
mysql中在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE时,向数据库中插入一条记录: 若插入数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作(UPDA ...
- PHP设计模式 - 解释器模式
给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子. 角色: 环境角色(PlayContent):定义解释规则的全局信息. 抽象解释器(Empress):定 ...
- 材质(Material)和几何体(Geometry)
1. 材质 一个材质结合一个几何体可以组成一个mesh对象.材质就像物体的皮肤,决定了几何体的外表.例如:皮肤定义了一个几何体看起来是否像金属.透明与否,或者显示为线框. 基本的材质如下: 1. ...
- Python知识点总结篇(五)
软件目录结构规范 目标: 提高可读性: 提高可维护性: 常见结构 Demo/ |-- bin/ #存放项目的一些可执行文件 | |-- demo #可执行程序,启动demo调main.py | |-- ...
- IDEA 开发插件
Alibaba Java Code Guidelines 阿里巴巴推出的一款Java代码规约扫描插件,按照<阿里巴巴Java开发手册>规定对代码风格以及质量进行实时检测.约束.强推.ecl ...
- RabbitMQ之消息模式(下)
目的: RabbitMQ之消息模式(上):https://www.cnblogs.com/huangting/p/11994539.html 消费端限流 消息的ACK与重回队列 TTL消息 死信队列 ...
- LOJ#2409. 「THUPC 2017」小 L 的计算题 / Sum(生成函数)
题意 给定一个长为 \(n\) 的序列 \(\{a_i\}\) 对于 \(k \in [1, n]\) 求 \[ f_k = \sum_{i = 1}^{n} a_i^k \pmod {9982443 ...
- golang ---cron
package main import ( l4g "github.com/alecthomas/log4go" "github.com/robfig/cron" ...