洛谷 P3130 [USACO15DEC]计数haybalesCounting Haybales
题目描述
Farmer John is trying to hire contractors to help rearrange his farm, but so far all of them have quit when they saw the complicated sequence of instructions FJ wanted them to follow. Left to complete the project by himself, he realizes that indeed, he has made the project perhaps more complicated than necessary. Please help him follow his instructions to complete the farm upgrade.
FJ's farm consists of NN fields in a row, conveniently numbered 1 \ldots N1…N. In each field there can be any number of haybales. Farmer John's instructions contain three types of entries:
1) Given a contiguous interval of fields, add a new haybale to each field.
2) Given a contiguous interval of fields, determine the minimum number of haybales in a field within that interval.
3) Given a contiguous interval of fields, count the total number of haybales inside that interval.
FJ像雇佣几个人在他的农场里帮忙,他需要进行很多种操作,请你帮他搞定。
FJ的农场有N块田地排长一行,编号是从1到N的。每一块田地都有很多草包。FJ要进行下面几种操作:
1)给定一段连续的田地,给每一个田地都增加一些新的草包。
2)给定一段连续的田地,找出草包最少的田地有多少草包。
3)给定一段连续的田地,统计一共有多少草包。
输入输出格式
输入格式:
The first line contains two positive integers, NN (1 \leq N \leq 200,0001≤N≤200,000) and
QQ (1 \leq Q \leq 100,0001≤Q≤100,000).
The next line contains NN nonnegative integers, each at most 100,000,
indicating how many haybales are initially in each field.
Each of the next QQ lines contains a single uppercase letter, either M, P or S,
followed by either two positive integers AA and BB (1 \leq A \leq B \leq N1≤A≤B≤N),
or three positive integers AA, BB, and CC (1 \leq A \leq B \leq N1≤A≤B≤N;
1 \leq C \leq 100,0001≤C≤100,000). There will be three positive integers if and only if
the uppercase letter is P.
If the letter is M, print the minimum number of haybales in the interval of fields
from A \ldots BA…B.
If the letter is P, put CC new haybales in each field in the interval of fields
from A \ldots BA…B.
If the letter is S, print the total number of haybales found within interval of
fields from A \ldots BA…B.
输出格式:
A line in the output should appear in response to every 'M' or 'S' entry in FJ's
instructions.
输入输出样例
4 5
3 1 2 4
M 3 4
S 1 3
P 2 3 1
M 3 4
S 1 3
2
6
3
8
思路:裸的线段树,区间修改+区间查询。标签写着并差集,不知道并差集可不可做。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 200010
using namespace std;
int n,m;
struct nond{
int l,r;
long long min,sum,flag;
}tree[MAXN*];
void up(int now){
tree[now].sum=tree[now*].sum+tree[now*+].sum;
tree[now].min=min(tree[now*].min,tree[now*+].min);
}
void build(int now,int l,int r){
tree[now].l=l;
tree[now].r=r;
if(tree[now].l==tree[now].r){
scanf("%lld",&tree[now].sum);
tree[now].min=tree[now].sum;
return ;
}
int mid=(tree[now].l+tree[now].r)/;
build(now*,l,mid);
build(now*+,mid+,r);
up(now);
}
void down(int now){
tree[now*].flag+=tree[now].flag;
tree[now*+].flag+=tree[now].flag;
tree[now*].min+=tree[now].flag;
tree[now*+].min+=tree[now].flag;
tree[now*].sum+=(tree[now*].r-tree[now*].l+)*tree[now].flag;
tree[now*+].sum+=(tree[now*+].r-tree[now*+].l+)*tree[now].flag;
tree[now].flag=;
}
void change(int now,int l,int r,long long opt){
if(tree[now].l==l&&tree[now].r==r){
tree[now].min+=opt;
tree[now].flag+=opt;
tree[now].sum+=(tree[now].r-tree[now].l+)*opt;
return ;
}
if(tree[now].flag) down(now);
int mid=(tree[now].l+tree[now].r)/;
if(r<=mid) change(now*,l,r,opt);
else if(l>mid) change(now*+,l,r,opt);
else{
change(now*,l,mid,opt);
change(now*+,mid+,r,opt);
}
up(now);
}
long long query(int now,int l,int r,int opt){
if(tree[now].l==l&&tree[now].r==r){
if(opt==) return tree[now].sum;
else return tree[now].min;
}
if(tree[now].flag) down(now);
int mid=(tree[now].l+tree[now].r)/;
if(r<=mid) return query(now*,l,r,opt);
else if(l>mid) return query(now*+,l,r,opt);
else{
if(opt==) return query(now*,l,mid,opt)+query(now*+,mid+,r,opt);
else return min(query(now*,l,mid,opt),query(now*+,mid+,r,opt));
}
}
int main(){
scanf("%d%d",&n,&m);
build(,,n);
for(int i=;i<=m;i++){
char s[];int x,y,z;
scanf("%s%d%d",s,&x,&y);
if(s[]=='S') cout<<query(,x,y,)<<endl;
if(s[]=='M') cout<<query(,x,y,)<<endl;
if(s[]=='P'){
scanf("%lld",&z);
change(,x,y,z);
}
}
} /*
4 5
3 1 2 4
M 3 4
S 1 3
P 2 3 1
M 3 4
S 1 3
*/
洛谷 P3130 [USACO15DEC]计数haybalesCounting Haybales的更多相关文章
- P3130 [USACO15DEC]计数haybalesCounting Haybales
P3130 [USACO15DEC]计数haybalesCounting Haybales 1)给定一段连续的田地,给每一个田地都增加一些新的草包. 2)给定一段连续的田地,找出草包最少的田地有多少草 ...
- 洛谷 P3128 [USACO15DEC]最大流Max Flow-树上差分(点权/点覆盖)(模板题)
因为徐州现场赛的G是树上差分+组合数学,但是比赛的时候没有写出来(自闭),背锅. 会差分数组但是不会树上差分,然后就学了一下. 看了一些东西之后,对树上差分写一点个人的理解: 首先要知道在树上,两点之 ...
- 洛谷P1144-最短路计数-最短路变形
洛谷P1144-最短路计数 题目描述: 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 思路: \(Dijkstra ...
- 洛谷P3130 haybalesCounting Haybale P 题解
题目 [USACO15DEC]haybalesCounting Haybale P 题解 最近刚刚自学了线段树这个数据结构,恰巧做到了这道线段树的模板题.其实也没有什么好多说的,接触过线段树的大犇肯定 ...
- 洛谷——P3914 染色计数
P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...
- 洛谷P3128 [USACO15DEC]最大流Max Flow
P3128 [USACO15DEC]最大流Max Flow 题目描述 Farmer John has installed a new system of N-1N−1 pipes to transpo ...
- 洛谷——P1176 路径计数2
P1176 路径计数2 题目描述 一个N \times NN×N的网格,你一开始在(1,1)(1,1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N,N)(N,N),即右下角有 ...
- 洛谷 P3914 染色计数
P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...
- 洛谷 P1176 路径计数2
P1176 路径计数2 题目描述 一个N×N的网格,你一开始在(1, 1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N, N),即右下角有多少种方法. 但是这个问题太简单了, ...
随机推荐
- hibernate 或jpa 中使用 AliasToBeanResultTransformer 自定义类型转换ResultTransformer 下划线转驼峰
jpa中使用 sql查询时,返回结果直接转为实体bean的实现, 需要自定义一个ResultTransformer,如下, import java.util.Arrays; import org.ap ...
- 纳德拉再造微软:市值如何重回第一阵营(思维确实变了,不再是以windows为中心,拥抱其它各种平台,敢在主战场之外找到适合自己的新战场)
有人说,现在的美国硅谷充满了“咖喱味”.也有人说,硅谷已经变成“印度谷”.原因就在于,以微软CEO萨提亚·纳德拉.谷歌CEO桑达尔·皮查伊为代表的印度人,近年以来掌控了全世界最令人望而生畏的科技巨头. ...
- Import Example Dataset
Overview The examples in this guide use the restaurants collection in the test database. The followi ...
- hdoj--1312--Red and Black(dfs)
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- springboot 静态方法注入bean、使用@value给static变量赋值
首先新建你的方法类:DemoUtil 头部加注解:@Component @Component public class DemoUtil { } 新增静态变量: static DemoService ...
- 7.stack
#include <iostream> #include <stack> #include <algorithm> #include <list> #i ...
- ARM嵌入式复习
第一章 1.嵌入式系统 “以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能,可靠性,成本,体积,功耗要求严格的专用计算机系统” 根据应用的要求,沿着“体积小,低功耗,高可靠”方向发 ...
- Busy waiting
In computer systems organization or operating systems, "busy waiting" refers to a process ...
- 列表的所有的input,将它的值以键值对的形式存放到一个数组里
要求的格式 代码块 $('.btn-confirm').on('tap',function(){ var arr={}; var name = $("input[name='insuranc ...
- 【Codeforces Round #422 (Div. 2) A】I'm bored with life
[题目链接]:http://codeforces.com/contest/822/problem/A [题意] 让你求a!和b!的gcd min(a,b)<=12 [题解] 哪个小就输出那个数的 ...