题目描述

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.

输入输出样例

输入样例#1: 复制

4 5
3 1 2 4
M 3 4
S 1 3
P 2 3 1
M 3 4
S 1 3
输出样例#1: 复制

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的更多相关文章

  1. P3130 [USACO15DEC]计数haybalesCounting Haybales

    P3130 [USACO15DEC]计数haybalesCounting Haybales 1)给定一段连续的田地,给每一个田地都增加一些新的草包. 2)给定一段连续的田地,找出草包最少的田地有多少草 ...

  2. 洛谷 P3128 [USACO15DEC]最大流Max Flow-树上差分(点权/点覆盖)(模板题)

    因为徐州现场赛的G是树上差分+组合数学,但是比赛的时候没有写出来(自闭),背锅. 会差分数组但是不会树上差分,然后就学了一下. 看了一些东西之后,对树上差分写一点个人的理解: 首先要知道在树上,两点之 ...

  3. 洛谷P1144-最短路计数-最短路变形

    洛谷P1144-最短路计数 题目描述: 给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1-N\).问从顶点\(1\)开始,到其他每个点的最短路有几条. 思路: \(Dijkstra ...

  4. 洛谷P3130 haybalesCounting Haybale P 题解

    题目 [USACO15DEC]haybalesCounting Haybale P 题解 最近刚刚自学了线段树这个数据结构,恰巧做到了这道线段树的模板题.其实也没有什么好多说的,接触过线段树的大犇肯定 ...

  5. 洛谷——P3914 染色计数

    P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...

  6. 洛谷P3128 [USACO15DEC]最大流Max Flow

    P3128 [USACO15DEC]最大流Max Flow 题目描述 Farmer John has installed a new system of N-1N−1 pipes to transpo ...

  7. 洛谷——P1176 路径计数2

    P1176 路径计数2 题目描述 一个N \times NN×N的网格,你一开始在(1,1)(1,1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N,N)(N,N),即右下角有 ...

  8. 洛谷 P3914 染色计数

    P3914 染色计数 题目描述 有一颗NN个节点的树,节点用1,2,\cdots,N1,2,⋯,N编号.你要给它染色,使得相邻节点的颜色不同.有MM种颜色,用1,2,\cdots,M1,2,⋯,M编号 ...

  9. 洛谷 P1176 路径计数2

    P1176 路径计数2 题目描述 一个N×N的网格,你一开始在(1, 1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N, N),即右下角有多少种方法. 但是这个问题太简单了, ...

随机推荐

  1. JNI中java类型的简写

      在JNI中,当我们使用GetFieldID/GetStaticFieldID或GetMethodID/GetStaticMethodID及定义JNINativeMethod等时,我们需要表示成员变 ...

  2. MinGW - 安装和配置 / MinGW - Howto Install And Configure

    MinGW在线安装程序下载地址:http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get- ...

  3. CUDA学习笔记(三)

    近期对CUDA的理解,是对库的利用. 1 nvcc.exe是CUDA C编译器. 2 cudart.dll是CUDA运行时API动态链接库. 3 在Sdk目录下,\lib有CUTIL.CUDPP等函数 ...

  4. 使用goroutine+channel和java多线程+queue队列的方式开发各有什么优缺点?

    我感觉很多项目使用java或者c的多线程库+线程安全的queue数据结构基本上可以实现goroutine+channel开发能达到的需求,所以请问一下为什么说golang更适合并发服务端的开发呢?使用 ...

  5. PostgreSQL Replication之第四章 设置异步复制(4)

    4.4 基于流和基于文件的恢复 生活并不总只是黑色或白色:有时也会有一些灰色色调.对于某些情况下,流复制可能恰到好处.在另一些情况下,基于文件复制和PITR是您所需要的.但是也有许多情况下,您既需要流 ...

  6. 《剑指offer》字符串中的字符替换

    一.题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 二.输入描 ...

  7. GoldenGate 双向复制解决方案

    1 双向复制方案简介 在双向复制(Bidirectional)方案中,可以采用以下两种部署方式: 方式一:配置源和目标数据库可以同时保持Active 状态,同时进行应用系统的事务处理, 此时需由应用系 ...

  8. [Codeforces 816A]Karen and Morning

    题目大意:给你一个时间(hh:mm),求最少经过多少分钟才能使这个时间变成回文. 解题思路:模拟,先判断0的情况,然后每过1分钟判断一次即可. C++ Code: #include<cstdio ...

  9. 【Henu ACM Round#16 F】Om Nom and Necklace

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] KMP算法可以把"i前缀"pre[i] 分成ssssst的形式 这里t是s的前缀. 然后s其实就是pre[i]中 ...

  10. Linux学习总结(9)——Linux 新手必知必会的 10 条 Linux 基本命令

    Linux 对我们的生活产生了巨大的冲击.至少你的安卓手机使用的就是 Linux 核心.尽管如此,在第一次开始使用 Linux 时你还是会感到难以下手.因为在 Linux 中,通常需要使用终端命令来取 ...