DZY Loves Colors
CF #446C:http://codeforces.com/problemset/problem/444/C
题意:给你n个数,大小从1到n,然后又两种操作,1 a b c表示把区间a b 更新为c,那么每个数与之前的数有一个改变量|c-ai|, 2 a b 表示查询a b 之间的改变量。
题解:正解必然是线段树。但是线段树的lazy还是不会用,以及要维护的东西也不清楚,这道水线段树都不会。一个值 mul维护当前的数,ans表示总的改变量,sum表示改变量。这里只有mul!=0才开始更新,否则pushdown();
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
using namespace std;
const int N=*1e5+;
int n,m;
int a,b,c;
long long d,cnt;
struct Node{
int l,r;
long long ans;
long long val,mul;
long long sum;
inline int mid(){
return (l+r)/;
}
inline int len(){
return r-l+;
}
}num[N*];
void pushup(int rt){
if(num[rt<<].mul==num[rt<<|].mul)
num[rt].mul=num[rt<<].mul;
num[rt].ans=num[rt<<].ans+num[rt<<|].ans;
}
void pushdown(int rt){
if(num[rt].mul!=){
num[rt<<|].mul=num[rt<<].mul=num[rt].mul;
num[rt<<].ans+=num[rt].sum*num[rt<<].len();
num[rt<<|].ans+=num[rt].sum*num[rt<<|].len();
num[rt<<].sum+=num[rt].sum;
num[rt<<|].sum+=num[rt].sum;
num[rt].mul=num[rt].sum=;
}
}
void build(int l,int r,int rt){
num[rt].l=l;
num[rt].r=r;
num[rt].mul=num[rt].ans=num[rt].sum=;
if(l==r){
num[rt].mul=++cnt;
return;
}
int mid=(l+r)/;
build(l,mid,rt<<);
build(mid+,r,rt<<|);
pushup(rt);
}
void update(int l,int r,int rt,long long val){
if(num[rt].l==l&&num[rt].r==r&&num[rt].mul){
num[rt].sum+=abs(num[rt].mul-val);
num[rt].ans+=abs(num[rt].mul-val)*num[rt].len();
num[rt].mul=val;
return;
}
pushdown(rt);
int mid=num[rt].mid();
if(mid>=r)update(l,r,rt<<,val);
else if(mid<l)update(l,r,rt<<|,val);
else{
update(l,mid,rt<<,val);
update(mid+,r,rt<<|,val);
}
pushup(rt);
}
long long query(int l,int r,int rt){
if(num[rt].l==l&num[rt].r==r){
return num[rt].ans;
}
pushdown(rt);
int mid=num[rt].mid();
if(mid>=r)return query(l,r,rt<<);
else if(mid<l)return query(l,r,rt<<|);
else{
return query(l,mid,rt<<)+query(mid+,r,rt<<|);
}
pushup(rt);
}
int main(){
while(~scanf("%d%d",&n,&m)){
cnt=;
build(,n,);
for(int i=;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
if(a==){
scanf("%I64d",&d);
update(b,c,,d);
}
else
printf("%I64d\n",query(b,c,));
}
}
}
DZY Loves Colors的更多相关文章
- CF444C. DZY Loves Colors[线段树 区间]
C. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 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 线段树
题目链接: 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 ...
- Cf 444C DZY Loves Colors(段树)
DZY loves colors, and he enjoys painting. On a colorful day, DZY gets a colorful ribbon, which consi ...
- Codeforces 444 C - DZY Loves Colors
C - DZY Loves Colors 思路: 分块,复杂度有点玄学,和普通分块不同的是在这个块被一次染色的时候暴力染整个块. 代码: #pragma GCC optimize(2) #pragma ...
- Codeforces Round #254 (Div. 1) C. DZY Loves Colors 分块
C. DZY Loves Colors 题目连接: http://codeforces.com/contest/444/problem/C Description DZY loves colors, ...
- CodeForces 445E DZY Loves Colors
DZY Loves Colors Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces ...
- Codeforces Round #254 DZY Loves Colors
题意:输入n, m ; 有n给位置, 初始时第i个位置的color为i, colorfulness为0. 有m次操作,一种是把成段的区域color更新为x, 对于更新的区域,每个位置(令第i ...
- CF444C DZY Loves Colors
考试完之后打的第一场CF,异常惨烈呀,又只做出了一题了.A题呆滞的看了很久,领悟到了出题者的暗示,应该就是两个点的时候最大吧,不然的话这题肯定特别难敲,YY一发交上去然后就过了.然后就在不停地YY B ...
随机推荐
- Solr和IK分词器的整合
IK分词器相对于mmseg4J来说词典内容更加丰富,但是没有mmseg4J灵活,后者可以自定义自己的词语库.IK分词器的配置过程和mmseg4J一样简单,其过程如下: 1.引入IKAnalyzer.j ...
- Linux下报 java.net.SocketException权限不够 异常解决
转载自:http://wangchongan.com/articles/java-net-socket-exception-permission-denied.html 今天在Linux下用Jetty ...
- poj 3422 (费用流)
从左上角到有下角k次能获得的最大值. 跟hdu 2686一样的题目,这题一个点可以重复走,只能得到一次值. #include<stdio.h> #include<string.h&g ...
- mysql 加入�列,改动列,删除列。
MySQL 加入�列,改动列,删除列 ALTER TABLE:加入�,改动,删除表的列,约束等表的定义. 查看列:desc 表名; 改动表名:alter table t_book rename to ...
- [Angular 2] Template property syntax
This lesson covers using the [input] syntax to change an element property such as “hidden” or “conte ...
- configure JAAS for jboss 7.1 and mysql--reference
Hello all, In this tutorial we are going to configure JAAS for jboss 7.1 and mysql for Form based au ...
- 模仿ios下的coverflow
Android高级图片滚动控件,编写3D版的图片轮播器 http://blog.csdn.net/guolin_blog/article/details/17482089 A cool Open So ...
- Android滚动截屏,ScrollView截屏
在做分享功能的时候,需要截取全屏内容,一屏展示不完的内容,一般我们会用到 ListView 或 ScrollView 一: 普通截屏的实现 获取当前Window 的 DrawingCache 的方式, ...
- 给方法传递参数:ref参数和out参数
/*--------------------------------------------------- 给方法传递参数:ref参数和out参数 (P106) ------------------- ...
- PHP 关于文件操作的简单介绍
文件操作一直是Web程序员头疼的地方,而文件操作在CMS这样的系统中又是必须的.如今,PHP文件操作的函数内容已经非常强大,文件这部分也是学习PHP非常重要的一部分,希望大家不要忽略.这篇文章会简单介 ...