题目大意:

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. 20165203《Java程序设计》第九周学习总结

    20165203<Java程序设计>第九周学习总结 教材学习内容总结 URL类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符,使用URL创建对象的应用 ...

  2. abtest分流随机链接方法(javascript)

    ¶¹¸¯¸ÉËêµÄ·¨¹úµçÊÓ¸²¸Ç --> 代码如下 <!DOCTYPE HTML> <html> <head> <script type=& ...

  3. 【LOJ】#2123. 「HEOI2015」最短不公共子串

    题解 我们对于B串建出后缀自动机和序列自动机 对于问题1,枚举左端点然后跑后缀自动机,直到不能匹配作为这个左端点的答案 对于问题2,枚举左端点然后跑序列自动机,直到不能匹配 对于问题3,设f[i][j ...

  4. Educational Codeforces Round 44 (Rated for Div. 2) F - Isomorphic Strings

    F - Isomorphic Strings 题目大意:给你一个长度为n 由小写字母组成的字符串,有m个询问, 每个询问给你两个区间, 问你xi,yi能不能形成映射关系. 思路:这个题意好难懂啊... ...

  5. linux kernel.shmall shemax shemin解释

        Linux X86-64操作系统,Oracle 10g数据库,由8G加到16G,把kernel.shmmax参数改到17179869184(16G)后,发现只要修改sga_max_size和s ...

  6. ECSHOP中 {insert name='ads' id=$ads_id num=$ads_num}含义

    <div class="smallban">        <ul>                <!-- TemplateBeginEditabl ...

  7. 基于Laravel开发博客应用系列 —— 构建博客后台管理系统

    一个完整的博客应用不能没有后台管理系统.所以在本节中我们将继续完善博客应用 —— 开发后台管理系统. 1.创建路由 在上一节十分钟创建博客项目中,已经设置过了 app/Http/routes.php, ...

  8. 线段树-最小逆序数hdu1394

    title: 线段树-最小逆序数 date: 2018-10-12 17:19:16 tags: acm 算法 刷题 categories: ACM-线段树 概述 这是一道简单的线段树的题,,,当然还 ...

  9. springmvc遇见406错误的问题分析

    如果springmvc遇到406错误: 90%没有加入Jackson的包 10%因为后缀为.html 10%的情况,解决方案为加多一个映射,使用.action

  10. iOS 11开发教程(七)编写第一个iOS11代码Hello,World

    iOS 11开发教程(七)编写第一个iOS11代码Hello,World 代码就是用来实现某一特定的功能,而用计算机语言编写的命令序列的集合.现在就来通过代码在文本框中实现显示“Hello,World ...