codeforces 444 C. DZY Loves Colors(线段树)
题目大意:
1 l r x操作 讲 [l,r]上的节点涂成x颜色,而且每一个节点的值都加上 |y-x| y为涂之前的颜色
2 l r 操作,求出[l,r]上的和。
思路分析:
假设一个区间为同样的颜色。那么我们才干够合并操作。
所以我们之前找同样的区间就好。
可是问题是怎样合并操作。
那么我们定义一个val 表示这个区间每一个位置上应该加上的值。
pushdown 的时候这个值是能够相加的。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define maxn 100005
#define lson num<<1,s,mid
#define rson num<<1|1,mid+1,e using namespace std;
typedef long long LL;
LL color[maxn<<2];
LL sum[maxn<<2];
LL val[maxn<<2]; LL Abs(LL x)
{
return x>0?x:-x;
} void pushdown(int num,int s,int e)
{
if(color[num]!=-1)
{
int mid=(s+e)>>1;
sum[num<<1]+=val[num]*(mid-s+1);
sum[num<<1|1]+=val[num]*(e-mid);
val[num<<1]+=val[num];
val[num<<1|1]+=val[num];
color[num<<1]=color[num<<1|1]=color[num];
color[num]=-1;
val[num]=0;
}
}
void pushup(int num)
{
if(color[num<<1]==color[num<<1|1])
color[num]=color[num<<1];
else color[num]=-1;
sum[num]=sum[num<<1]+sum[num<<1|1];
}
void build(int num,int s,int e)
{
sum[num]=0;
val[num]=0;
color[num]=-1;
if(s==e)
{
color[num]=s;
return;
}
int mid=(s+e)>>1;
build(lson);
build(rson);
}
void update(int num,int s,int e,int l,int r,LL v)
{
if(l<=s && r>=e)
{
if(color[num]!=-1)
{
sum[num]+=(LL)Abs(v-color[num])*(e-s+1);
val[num]+=Abs(color[num]-v);
color[num]=v;
return;
}
}
int mid=(s+e)>>1;
pushdown(num,s,e);
if(l<=mid)update(lson,l,r,v);
if(r>mid)update(rson,l,r,v);
pushup(num);
}
LL query(int num,int s,int e,int l,int r)
{
if(l<=s && r>=e)
{
return sum[num];
}
int mid=(s+e)>>1;
pushdown(num,s,e);
if(r<=mid)return query(lson,l,r);
else if(l>mid)return query(rson,l,r);
else return query(lson,l,mid)+query(rson,mid+1,r);
} int main()
{
int n,m;
scanf("%d%d",&n,&m);
build(1,1,n); while(m--)
{
int type;
scanf("%d",&type);
if(type==1){
int l,r;
LL x;
scanf("%d%d%I64d",&l,&r,&x);
update(1,1,n,l,r,x);
}
else
{
int l,r;
scanf("%d%d",&l,&r);
printf("%I64d\n",query(1,1,n,l,r));
}
}
return 0;
}
/*
10 10
1 5 9 6
2 6 10
1 1 9 3
1 3 10 5
2 4 6
*/
codeforces 444 C. DZY Loves Colors(线段树)的更多相关文章
- Codeforces 444 C. DZY Loves Colors (线段树+剪枝)
题目链接:http://codeforces.com/contest/444/problem/C 给定一个长度为n的序列,初始时ai=i,vali=0(1≤i≤n).有两种操作: 将区间[L,R]的值 ...
- Codeforces Round #254 (Div. 1) C. DZY Loves Colors 线段树
题目链接: http://codeforces.com/problemset/problem/444/C J. DZY Loves Colors time limit per test:2 secon ...
- Codeforces 444C DZY Loves Colors(线段树)
题目大意:Codeforces 444C DZY Loves Colors 题目大意:两种操作,1是改动区间上l到r上面德值为x,2是询问l到r区间总的改动值. 解题思路:线段树模板题. #inclu ...
- CF444C. DZY Loves Colors[线段树 区间]
C. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces 444 C - DZY Loves Colors
C - DZY Loves Colors 思路: 分块,复杂度有点玄学,和普通分块不同的是在这个块被一次染色的时候暴力染整个块. 代码: #pragma GCC optimize(2) #pragma ...
- HDU5649 DZY Loves Sorting 线段树
题意:BC 76 div1 1004 有中文题面 然后奉上官方题解: 这是一道良心的基础数据结构题. 我们二分a[k]的值,假设当前是mid,然后把大于mid的数字标为1,不大于mid的数字标为0.然 ...
- Codeforces Round #254 DZY Loves Colors
题意:输入n, m ; 有n给位置, 初始时第i个位置的color为i, colorfulness为0. 有m次操作,一种是把成段的区域color更新为x, 对于更新的区域,每个位置(令第i ...
- Codeforces444C DZY Loves Colors(线段树)
题目 Source http://codeforces.com/problemset/problem/444/C Description DZY loves colors, and he enjoys ...
- Codeforces Round #254 (Div. 1) C. DZY Loves Colors 分块
C. DZY Loves Colors 题目连接: http://codeforces.com/contest/444/problem/C Description DZY loves colors, ...
随机推荐
- CSS常见简写规则整理
外边距(margin) margin-top margin-right margin-bottom margin-left 简写顺序为顺时针方向(上.右.下.左),如:margin: 1px 2px ...
- post提交数据的四种编码方式
这里总结下post提交数据的四种方式. 参考文章: https://www.jianshu.com/p/3c3157669b64
- INNODB表快速迁移
本实验在一台server上启动了2个mysql实例端口分别是3307 3308,目的是将3307的表aaa迁移到3308中去,并打开3308的slave 1.在3308上 mysql> dr ...
- USACO 4.4 Shuttle Puzzle
Shuttle PuzzleTraditional The Shuttle Puzzle of size 3 consists of 3 white marbles, 3 black marbles, ...
- 《Android源码设计模式》--Builder模式
No1: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 No2: 在Android源码中,最常用到的Builder模式就是AlertDialog.Builder No3: ...
- JAVAEE——宜立方商城11:sso登录注册功能实现、通过token获得用户信息、Ajax跨域请求(jsonp)
1. 学习计划 第十一天: 1.sso注册功能实现 2.sso登录功能实现 3.通过token获得用户信息 4.Ajax跨域请求(jsonp) 2. Sso系统工程搭建 需要创建一个sso服务工程,可 ...
- SQLSERVER2014集群实战——DNS的坑
近几日生产环境总是偶发的出现数据库连接失败的错误,一开始并未引起重视,因为反馈的人很少,而且应用服务器与数据库服务器都处在同一机房的内网环境,相互之间的访问应该是很稳定的.直到早上有几分钟的时间里出现 ...
- 【持续更新】NOIP注意事项
1.无根据的乱搞不可能对 2.必须造极限数据跑一下 3.必须测空间 4.不管用不用都把cstring加上 5.开文件测样例 6.删一长串代码最好注释 7.到10:00先敲暴力 8.题读三遍 9.先做好 ...
- nginx_lua vs nginx+php 应用场景
在我的印象中很多人还是选择nginx+php这种组合搭配,你的选择是nginx+lua,那么nginx+lua比和php的组合优势在哪里?清无:首先,Nginx+php之间是要有进程之间通信的,这样以 ...
- (Nginx和PHP下)URL重写,TP实现URL重写
UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址. 优点 一:提高安全性,可以有效的避免一些参数名.ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话 ...