题目大意:

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(线段树)的更多相关文章

  1. Codeforces 444 C. DZY Loves Colors (线段树+剪枝)

    题目链接:http://codeforces.com/contest/444/problem/C 给定一个长度为n的序列,初始时ai=i,vali=0(1≤i≤n).有两种操作: 将区间[L,R]的值 ...

  2. 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 ...

  3. Codeforces 444C DZY Loves Colors(线段树)

    题目大意:Codeforces 444C DZY Loves Colors 题目大意:两种操作,1是改动区间上l到r上面德值为x,2是询问l到r区间总的改动值. 解题思路:线段树模板题. #inclu ...

  4. CF444C. DZY Loves Colors[线段树 区间]

    C. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. Codeforces 444 C - DZY Loves Colors

    C - DZY Loves Colors 思路: 分块,复杂度有点玄学,和普通分块不同的是在这个块被一次染色的时候暴力染整个块. 代码: #pragma GCC optimize(2) #pragma ...

  6. HDU5649 DZY Loves Sorting 线段树

    题意:BC 76 div1 1004 有中文题面 然后奉上官方题解: 这是一道良心的基础数据结构题. 我们二分a[k]的值,假设当前是mid,然后把大于mid的数字标为1,不大于mid的数字标为0.然 ...

  7. Codeforces Round #254 DZY Loves Colors

    题意:输入n, m ; 有n给位置, 初始时第i个位置的color为i, colorfulness为0.      有m次操作,一种是把成段的区域color更新为x, 对于更新的区域,每个位置(令第i ...

  8. Codeforces444C DZY Loves Colors(线段树)

    题目 Source http://codeforces.com/problemset/problem/444/C Description DZY loves colors, and he enjoys ...

  9. Codeforces Round #254 (Div. 1) C. DZY Loves Colors 分块

    C. DZY Loves Colors 题目连接: http://codeforces.com/contest/444/problem/C Description DZY loves colors, ...

随机推荐

  1. bzoj 3926 转换+广义后缀自动机

    思路:重点在于叶子节点只有20个,我们把叶子节点提到根,把20个trie图插入后缀自动机,然后就是算有多少个本质不同的字串. #include<bits/stdc++.h> #define ...

  2. 【Java】 String类型的==使用

    public class StringDemo { public static void main(String[] args) { String s1 = "abc"; Stri ...

  3. HandlerExceptionResolver统一异常处理 返回JSON 和 ModelAndView

    统一异常处理类的两种方式一种是前后分离,一种是一整套集合返回指定到指定的错误页面显示错误信息 1.由于前后分离,是统一返回JSON的格式 自定义Exception public class Bussi ...

  4. 【原创】获取MySQL crash 时的core file

    最近有台服务器的MySQL经常crash,为了进一步定位问题,开启了mysql core file功能,开启步骤如下,供参考 [开启步骤] 1. my.cnf文件中增加2个配置选项 [mysqld] ...

  5. Home Assistant + 树莓派:强大的智能家居系统 · 安装篇

    Home Assistant + 树莓派:强大的智能家居系统 · 安装篇 转载:Home Assistant + 树莓派:强大的智能家居系统 · 安装篇 目录 1. 初始安装 3. Homebridg ...

  6. [ 转载 ] Java基础13--equals方法

    一.equals方法介绍 1.1.通过下面的例子掌握equals的用法 1 package cn.galc.test; 2 3 public class TestEquals { 4 public s ...

  7. 【BZOJ 3470】3470: Freda’s Walk 期望

    3470: Freda’s Walk Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 42  Solved: 22 Description 雨后的Poet ...

  8. codevs 1005 生日礼物

    1005 生日礼物  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 9月12日是小松的朋友小寒的生日.小松知 ...

  9. Apache之.htaccess备忘录(二)

    博主热衷各种互联网技术,常啰嗦,时常伴有强迫症,常更新,觉得文章对你有帮助的可以关注我. 转载请注明"深蓝的镰刀" 书接上回,<Apache之.htaccess备忘录(一)& ...

  10. Elasticsearch中document的基础知识

    写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 参考内容: <Ela ...