小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 集训难度的更多相关文章

  1. CSU 2151 集训难度【多标记线段树】

    http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2151 Input 第一行三个数n,m,v0 表示有n名萌新和m次调整,初始时全部萌新的集训难度 ...

  2. 关于ACM,关于CSU

    原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...

  3. 2015UESTC 暑假集训总结

    day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...

  4. 2017-12 CDQZ集训(已完结)

    从联赛活了下来(虽然分数倒一……),接下来要去CDQZ集训啦…… DAY -2 2017-12-16 被老师安排负责一部分同学的住宿以及安排…… 抓紧时间继续学习,LCT真好玩啊真好玩…… 晚上放假了 ...

  5. 2017/10 冲刺NOIP集训记录:暁の水平线に胜利を刻むのです!

    前几次集训都没有记录每天的点滴……感觉缺失了很多反思的机会. 这次就从今天开始吧!不能懈怠,稳步前进! 2017/10/1 今天上午进行了集训的第一次考试…… 但是这次考试似乎是近几次我考得最渣的一次 ...

  6. HN2018省队集训

    HN2018省队集训 Day1 今天的题目来自于雅礼的高二学长\(dy0607\). 压缩包下载 密码: 27n7 流水账 震惊!穿着该校校服竟然在四大名校畅通无阻?霸主地位已定? \(7:10\)从 ...

  7. CSU 1974

    Description 对于csuxushu来说,能够在CSU(California State University)组织2017年的ACM暑期集训让他感到十分荣幸. csuxushu是一名充满梦想 ...

  8. NOIP后省选集训前文化课划水记

    划水划了一个多月,文化课没啥长进还他妈累死了...--ghj1222 11.11(NOIP Day2) 师傅开车开得很快,晚上8:00多就到了二狱 晚上听毒瘤班主任swh讲了半节语文,我:黑人问号.j ...

  9. CSU 1809 Parenthesis(RMQ-ST+思考)

    1809: Parenthesis Submit Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n ...

随机推荐

  1. 思科获取DHCP过程

    主机如何获取DHCP的过程? 地址请求: 客户端发布一个DHCP请求信息,该信息会发给网内所有主机,非DHCP服务器会丢弃信息. 地址提供: DHCP服务端收到该信息后,会从地址池内挑选一个未被使用的 ...

  2. 决策树(上)-ID3、C4.5、CART

    参考资料(要是对于本文的理解不够透彻,必须将以下博客认知阅读,方可全面了解决策树): 1.https://zhuanlan.zhihu.com/p/85731206 2.https://zhuanla ...

  3. [笔记] HOW2J.CN网站记录的java笔记_第四部分_HTML

    1.写一个显示Hello World的网页, <html> <body> <p>Hello World</p> </body> </h ...

  4. Intellij IDEA搭建JSP+Tomcat开发环境

    1.新建项目 然后填入项目名称和选择项目路径,填完点击完成. 2.添加WEB框架 别问我为什么不一开始就直接新建WEB框架,因为我也是看的别人的教程0.0 不过还遇到了一些新问题,后面会讲到 3.配置 ...

  5. 021.掌握Pod-Pod调度策略

    一 Pod生命周期管理 1.1 Pod生命周期 Pod在整个生命周期过程中被系统定义了如下各种状态. 状态值 描述 Pending API Server已经创建该Pod,且Pod内还有一个或多个容器的 ...

  6. ThinkPHP 怎样让URL访问的时候省略 index.php

    ThinkPHP 怎样让URL访问的时候省略 index.php Nginx 服务器配置 修改 nginx.conf 文件 location / { // …..省略部分代码 if (!-e $req ...

  7. nyoj 76-超级台阶 (递推)

    76-超级台阶 内存限制:64MB 时间限制:1000ms 特判: No 通过数:8 提交数:12 难度:3 题目描述: 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共 ...

  8. VS Code 中使用 GitHub pull request 插件提交代码

    VS Code作为一个代码编辑器,受到很多人的喜爱:其中有很多非常有用的插件/扩展功能,也会极大的提高我们的工作效率. 这里介绍一下GitHub pull request,用来向GitHub提交在VS ...

  9. 使用ndk交叉编译android各平台版本的第三方库

    只要弄明白了ndk-bundle的目录结构,交叉编译的基本原理就可以自行编写脚本去编译了.从仓库拿下代码包后,一般在linux平台下编译当前平台使用的库,只要使用其自动配置脚本configure进行平 ...

  10. Mac的Safari安装油猴插件(Tampermonkey)

    Mac的Safari安装油猴插件(Tampermonkey) 官方的AppStore是没有油猴插件(Tampermonkey)的,官方插件不仅少,功能被阉割,相对弱小,还收费.嗯,这很苹果第三方拓展. ...