小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. 使用CXF发布webservice服务及注意要点

    一.概念 1.什么是webservice Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用 ...

  2. [ISE使用] 使用ISE的过程中,遇到过的一些“软件上的问题”

    1.planahead打不开了. PlanAhead替代文件rdiArgs.bat的下载链接如下: http://www.eevblog.com/forum/microcontrollers/guid ...

  3. 做HTML静态页面时遇到的问题总结

    1. 如果所示,问题:“首页”和“闲置”文字部分位于table中部 解决方法:需要取消vertical-align:middle属性,将其设置为vertical-align:top,并将文本的高度改为 ...

  4. 文件系统类型(ext4、xfs、fat32、vfat、ntfs、....)

    Linux 1.Linux:存在几十个文件系统类型:ext2,ext3,ext4,xfs,brtfs,zfs(man 5 fs可以取得全部文件系统的介绍) 不同文件系统采用不同的方法来管理磁盘空间,各 ...

  5. 【原创】(十一)Linux内存管理slub分配器

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  6. vue常用指令总结

    一.vue指令 官网解释 指令 (Directives) 是带有 v- 前缀的特殊特性.指令特性的值预期是单个 JavaScript 表达式 (v-for 是例外情况).指令的职责是,当表达式的值改变 ...

  7. Jib插件构建镜像push到阿里云镜像仓库

    一.前言 Jib:Google开源的Java容器化工具 可作为插件快速集成到项目中,构建镜像,实现 Java 应用容器化 下面贴出一张从网上看到的Jib描述~ 二.利用Jib插件构建镜像push到阿里 ...

  8. node中mysql和短信使用方法(3)

    一.mysql的使用 使用mysql首先得有数据库并且表里面有数据,我创建了数据库newsql,里面Tables有表company等等. company有id,name,other等字段 1.导入my ...

  9. 2019-11-22:xss绕过笔记

    xss变形 大小写混合,sCRipt重复写,scrscriptipt通过某些标签来src属性,构造pyload,src找不到数据源的时候内部会出错,此时使用onerror触发,或iframe标签,&l ...

  10. 2019-9-28:渗透测试,基础学习,pgp常量,逻辑运算,DNS投毒,笔记

    sunny.exe clientid 隧道ID route -n 查看网关netstat -rn 查看网关 DNS劫持ettercap用来内网渗透测试使用,可以嗅探内网,DNS劫持等攻击1,在攻击者电 ...