CSU OJ2151 集训难度
小L正在组织acm暑假集训,但众所周知,暑假集训的萌新中有OI神犇,也有暑假才开始学算法的萌新,如果统一集训的难度,无法很好地让萌新们得到训练,所以小L想了一个办法,根据每次测试的情况,改变萌新们的集训难度。现在将萌新们编号为1到n,最初萌新们的集训难度为v0,测试后有两种操作,第一种是某一区间的萌新的集训难度同时提高,另一种是将某一段区间的萌新的集训难度变为同一个数,同时,Wells希望在某次调整难度之后,知道某一段区间的萌新的集训难度之和,由于小L比较鶸,他并不知道如何快速解决这个问题,你能帮帮他嘛?
Input
第一行三个数n,m,v0 表示有n名萌新和m次调整,初始时全部萌新的集训难度都为v0
第2~m+1行 每行三个数或四个数
0 x y v 表示把 [x,y]区间内的萌新的集训难度都增加v
1 x y v 表示把 [x,y]区间内的萌新的集训难度都变为v
2 x y表示询问[x,y]区间内萌新的集训难度之和
0<n,m<=10^5, |v|<=10^5
Output
每个询问一行,输出答案
Sample Input
3 5 0
0 1 3 1
1 2 3 2
2 1 1
2 2 2
2 2 3
Sample Output
1
2
4
Hint
题解:线段树基本操作,区间加上一个数,区间变为一个数,区间和;
#include<cstdio>
#include<algorithm>
#define N 100001
using namespace std;
int n,m,x,y;
long long z,val,ans;
struct node
{
int l,r,siz;
long long set,add,sum;
bool v;
} tree[N<<]; void build(int k,int l,int r)
{
tree[k].l=l; tree[k].r=r; tree[k].siz=r-l+;
if(l==r)
{
tree[k].sum=val;
return ;
}
int mid=l+r>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
tree[k].sum=tree[k<<].sum+tree[k<<|].sum;
} void pushup(int k)
{
tree[k].sum=tree[k<<].sum+tree[k<<|].sum;
} void pushdown_set(int k)
{
tree[k<<].add=tree[k<<|].add=;
tree[k<<].set=tree[k<<|].set=tree[k].set;
tree[k<<].v=tree[k<<|].v=true;
tree[k<<].sum=tree[k<<].siz*tree[k].set;
tree[k<<|].sum=tree[k<<|].siz*tree[k].set;
tree[k].v=false; tree[k].set=;
} void pushdown_add(int k)
{
tree[k<<].sum+=tree[k<<].siz*tree[k].add;
tree[k<<|].sum+=tree[k<<|].siz*tree[k].add;
tree[k<<].add+=tree[k].add;
tree[k<<|].add+=tree[k].add;
tree[k].add=;
} void Set(int k,int l,int r,long long z)//区间修改为某个值
{
if(tree[k].l>=l&&tree[k].r<=r)
{
tree[k].set=z; tree[k].v=true;
tree[k].sum=z*tree[k].siz;
tree[k].add=;
return;
}
if(tree[k].v) pushdown_set(k);
if(tree[k].add) pushdown_add(k);
int mid=tree[k].l+tree[k].r>>;
if(l<=mid) Set(k<<,l,r,z);
if(r>mid) Set(k<<|,l,r,z);
pushup(k);
} void Add(int k,int l,int r,long long z)//区间加上某个值
{
if(tree[k].l>=l&&tree[k].r<=r)
{
tree[k].add+=z;
tree[k].sum+=z*tree[k].siz;
return;
}
if(tree[k].v) pushdown_set(k);
if(tree[k].add) pushdown_add(k);
int mid=tree[k].l+tree[k].r>>;
if(l<=mid) Add(k<<,l,r,z);
if(r>mid) Add(k<<|,l,r,z);
pushup(k);
} void query(int k,int l,int r)
{
if(tree[k].l>=l&&tree[k].r<=r)
{
ans+=tree[k].sum;
return;
}
if(tree[k].v) pushdown_set(k);
if(tree[k].add) pushdown_add(k);
int mid=tree[k].l+tree[k].r>>;
if(l<=mid) query(k<<,l,r);
if(r>mid) query(k<<|,l,r);
}
int main()
{
scanf("%d%d%lld",&n,&m,&val);
build(,,n);
while(m--)
{
int temp;
scanf("%d",&temp);
if(temp==)
{
scanf("%d%d%lld",&x,&y,&z);
Add(,x,y,z);
}
else if(temp==)
{
scanf("%d%d%lld",&x,&y,&z);
Set(,x,y,z);
}
else
{
scanf("%d%d",&x,&y);
ans=;
query(,x,y);
printf("%lld\n",ans);
} }
}
参考代码:
CSU OJ2151 集训难度的更多相关文章
- CSU 2151 集训难度【多标记线段树】
http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2151 Input 第一行三个数n,m,v0 表示有n名萌新和m次调整,初始时全部萌新的集训难度 ...
- 关于ACM,关于CSU
原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...
- 2015UESTC 暑假集训总结
day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...
- 2017-12 CDQZ集训(已完结)
从联赛活了下来(虽然分数倒一……),接下来要去CDQZ集训啦…… DAY -2 2017-12-16 被老师安排负责一部分同学的住宿以及安排…… 抓紧时间继续学习,LCT真好玩啊真好玩…… 晚上放假了 ...
- 2017/10 冲刺NOIP集训记录:暁の水平线に胜利を刻むのです!
前几次集训都没有记录每天的点滴……感觉缺失了很多反思的机会. 这次就从今天开始吧!不能懈怠,稳步前进! 2017/10/1 今天上午进行了集训的第一次考试…… 但是这次考试似乎是近几次我考得最渣的一次 ...
- HN2018省队集训
HN2018省队集训 Day1 今天的题目来自于雅礼的高二学长\(dy0607\). 压缩包下载 密码: 27n7 流水账 震惊!穿着该校校服竟然在四大名校畅通无阻?霸主地位已定? \(7:10\)从 ...
- CSU 1974
Description 对于csuxushu来说,能够在CSU(California State University)组织2017年的ACM暑期集训让他感到十分荣幸. csuxushu是一名充满梦想 ...
- NOIP后省选集训前文化课划水记
划水划了一个多月,文化课没啥长进还他妈累死了...--ghj1222 11.11(NOIP Day2) 师傅开车开得很快,晚上8:00多就到了二狱 晚上听毒瘤班主任swh讲了半节语文,我:黑人问号.j ...
- CSU 1809 Parenthesis(RMQ-ST+思考)
1809: Parenthesis Submit Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n ...
随机推荐
- node真的是单线程模式吗
提到node,我们就可以立刻想到单线程.异步IO.事件驱动等字眼.首先要明确的是node真的是单线程的吗,如果是单线程的,那么异步IO,以及定时事件(setTimeout.setInterval等)又 ...
- SQL的四种连接(左外连接、右外连接、内连接、全连接)
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...
- 【Mac】【SoupUI】许可证损坏问题
近期参考 https://www.cnblogs.com/shuaijie/articles/5913750.html#top 安装破解SoupUI 破解方法如下: 截至2014-10-9:SoapU ...
- ZeroC ICE的远程调用框架 ThreadPool
ThreadPool提供Reactor/Proactor服务,并且强偶合了Reactor(反应器)/Proactor(前摄器).不同于Reactor/Proactor使用线程池 进行事件处理的设计.如 ...
- iOS UIView x Android View
- 看淡生死,不服就干(C语言指针)
看淡生死,不服就干 emmmmm 其实今天蛮烦的 高等数学考的一塌糊涂 会的不会的都没写 真心没有高中轻松了啊 也不知道自己立的flag还能不能实现 既然选择了就一定坚持下去啊 下面还是放一段之前写的 ...
- Code Runner for VS Code 突破 1000 万下载量!支持运行超过 40 种语言
记得三年多前,韩老师那时还在写 PHP(是的,没错!在微软写 PHP),同时需要写 Python 和 Node.js .所以在那时,支持多种语言的 VS Code 已经是笔者的主力编辑器了.唯一不足的 ...
- router-link传递参数
有个功能: 依据传入值,跳到产品详情页,但是详情页的内容依据传入值来相应变化. 如果使用点击事件@clic来实现,则有三个重复的跳转代码. 避免多次定义重复函数,可以使用router-link 传参数 ...
- HTML学习 day02
1.HTML的相关概念 网站建设流程 网页组成 网页主要由三部分组成:结构(Structure).表现(Presentation)和行为(Behavior). html(Hypertext Mark ...
- pwnable.kr第二天
3.bof 这题就是简单的数组越界覆盖,直接用gdb 调试出偏移就ok from pwn import * context.log_level='debug' payload='A'*52+p32(0 ...