Codeforces 444 C. DZY Loves Colors (线段树+剪枝)
题目链接:http://codeforces.com/contest/444/problem/C
给定一个长度为n的序列,初始时ai=i,vali=0(1≤i≤n).有两种操作:
- 将区间[L,R]的值改为x,并且当一个数从y改成x时它的权值vali会增加|x−y|.
- 询问区间[L,R]的权值和.
n≤10^5,1≤x≤10^6.
感觉这是一个比较好的考察线段树区间更新的性质。
当区间的a[i]一样时,区间更新即可,这是剪枝。
注意,lazy标记存的是增量。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + ;
struct SegTree {
LL l, r, Min, Max;
LL val, lazy;
}T[N << ]; LL Abs(LL a) {
return a < ? -a : a;
} void pushup(int p) {
T[p].Min = min(T[p << ].Min, T[(p << )|].Min);
T[p].Max = max(T[p << ].Max, T[(p << )|].Max);
T[p].val = T[p << ].val + T[(p << )|].val;
} void pushdown(int p) {
if(T[p].l == T[p].r) {
return ;
} else if(T[p].lazy) {
T[p << ].lazy += T[p].lazy;
T[(p << )|].lazy += T[p].lazy;
T[p << ].val += T[p].lazy*(LL)(T[p << ].r - T[p << ].l + );
T[(p << )|].val += T[p].lazy*(LL)(T[(p << )|].r - T[(p << )|].l + );
T[p << ].Min = T[p << ].Max = T[(p << )|].Max = T[(p << )|].Min = T[p].Min;
T[p].lazy = ;
}
} void build(int p, int l, int r) {
int mid = (l + r) >> ;
T[p].l = l, T[p].r = r, T[p].lazy = ;
if(l == r) {
T[p].Max = l, T[p].Min = l;
T[p].val = ;
return ;
}
build(p << , l, mid);
build((p << )|, mid + , r);
pushup(p);
} void update(int p, int l, int r, LL add) {
int mid = (T[p].l + T[p].r) >> ;
pushdown(p);
if(l == T[p].l && T[p].r == r && T[p].Min == T[p].Max) {
T[p].val += (LL)Abs(add - T[p].Min)*(LL)(r - l + );
T[p].lazy += Abs(add - T[p].Max);
T[p].Max = T[p].Min = add;
return ;
}
if(r <= mid) {
update(p << , l, r, add);
} else if(l > mid) {
update((p << )|, l, r, add);
} else {
update(p << , l, mid, add);
update((p << )|, mid + , r, add);
}
pushup(p);
} LL query(int p, int l, int r) {
int mid = (T[p].l + T[p].r) >> ;
pushdown(p);
if(l == T[p].l && T[p].r == r) {
return T[p].val;
}
if(r <= mid) {
return query(p << , l, r);
} else if(l > mid) {
return query((p << )|, l, r);
} else {
return query(p << , l, mid) + query((p << )|, mid + , r);
}
pushup(p);
} int main()
{
int n, m, l, r, c;
LL add;
scanf("%d %d", &n, &m);
build(, , n);
while(m--) {
scanf("%d %d %d", &c, &l, &r);
if(c == ) {
scanf("%lld", &add);
update(, l, r, add);
} else {
printf("%lld\n", query(, l, r));
}
}
return ;
}
Codeforces 444 C. DZY Loves Colors (线段树+剪枝)的更多相关文章
- codeforces 444 C. DZY Loves Colors(线段树)
题目大意: 1 l r x操作 讲 [l,r]上的节点涂成x颜色,而且每一个节点的值都加上 |y-x| y为涂之前的颜色 2 l r 操作,求出[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, ...
随机推荐
- 51nod1354 选数字
01背包tle. 解题报告(by System Message) 类似于背包的DP,以乘积为状态.先把等选数字里面不是K约数的去掉.然后找出K的约数,进行离散化.然后dp[i][j]表示前i个数字乘积 ...
- Linux diff patch
/***************************************************************************** * Linux diff patch * ...
- open行情
日k线 只能取8年 1分钟K线 只能取五天 前复权K线出现负数的股价 后复权K线会出现上千的股价
- Remember-Me功能
Remember-Me功能 目录 1.1概述 1.2基于简单加密token的方法 1.3基于持久化token的方法 1.4Remember-Me相关接口和实现类 1.4.1TokenBasedReme ...
- Annotation(jdk5.0注解)复习(转自http://3w_cnblogs_com/pepcod/)
package annotation.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retent ...
- 【英语】Bingo口语笔记(39) - Get系列
- .CO域名快被这帮搞IT的玩坏了……
鉴于近来国内访问Google的服务受阻,greatfire.org于前天推出了其基于亚马逊AWS的Google搜索镜像网站,地址是sinaapp.co.该网站随后因多家海外媒体的报道和众多微博大V的转 ...
- liunx的目录结构
linux目录结构的最顶端是/目录 我们一般都称为root目录. linux有四种文件类型,分别是普通文件,目录文件,连接文件,特殊文件,可以用file来识别. 普通文件:文本文件 二进制文件 图像文 ...
- MySQL基础之第16章 数据备份与还原
16.1.数据备份 16.1.1.使用 mysqldump 命令备份 mysqldump [OPTIONS] database [tables]mysqldump [OPTIONS] --databa ...
- Http中Cookie与Set-Cookie头
[原文:http://hi.baidu.com/qinglvzhuye/item/6664a807bb8be3dd73e676d6] android 获取 cookies 有很多办法,但是记住了. h ...