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 ...
随机推荐
- MySQL用命令行复制表的方法
mysql中用命令行复制表结构的方法主要有一下几种: 1.只复制表结构到新表 ; 或 CREATE TABLE 新表 LIKE 旧表 ; 注意上面两种方式,前一种方式是不会复制时的主键类型和自增方式是 ...
- android设置view透明度的效果
android设置view透明度的效果 推荐textView.setBackgroundColor(Color.TRANSPARENT); 第一种方法:在xml文件中设置背景颜色. andro ...
- (转)cocos2dx 内存管理
原文地址:http://blog.csdn.net/ring0hx/article/details/7946397 cocos2dx的内存管理移植自Objective-C, 对于没有接触过OC的C++ ...
- Creating a simple static file server with Rewrite--reference
Today, I’d like to take a quick moment to demonstrate how to make a simple file server using Rewrite ...
- nginix 笔记
1. 一个master进程,多个worker进程,worker进程数目可自动配置为核的数目 2. 配置文件ngnix.conf存放在linux的/etc/ngnix目录下
- Android 模仿QQ空间风格的 UI(转)
本文内容 环境 演示模仿QQ空间风格的UI 虽然这个 UI 跟现在的QQ空间有点差别,但是也能学到很多东西. 下载 Demo 环境 Windows 7 64 位 Eclipse ADT V22.6.2 ...
- 每天一条Linux命令(OS X系统上操作)
Linux菜鸟必学的60个命令 安装和登录命令:login.shutdown.halt.reboot.install.mount.umount.chsh.exit.last: 文件处理命令:file ...
- 线程技术 ☞ Future模式
线程技术可以让我们的程序同时做多件事情,线程的工作模式有很多,常见的一种模式就是处理网站的并发,今天我来说说线程另一种很常见的模式,这个模式和前端里的ajax类似:浏览器一个主线程执行javascri ...
- 关于c#流
C#流的简单认识 前言 本篇文章简单总结了在C#编程中经常会用到的一些流.比如说FileStream.MemoryStream. BufferedStream. NetWorkStream. Str ...
- 在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移
在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移 最近发布的ASP.NET MVC 5 及Visual ...