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的更多相关文章

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

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

  2. Codeforces444C DZY Loves Colors(线段树)

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

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

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

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

  5. Cf 444C DZY Loves Colors(段树)

    DZY loves colors, and he enjoys painting. On a colorful day, DZY gets a colorful ribbon, which consi ...

  6. Codeforces 444 C - DZY Loves Colors

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

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

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

  8. CodeForces 445E DZY Loves Colors

    DZY Loves Colors Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces ...

  9. Codeforces Round #254 DZY Loves Colors

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

  10. CF444C DZY Loves Colors

    考试完之后打的第一场CF,异常惨烈呀,又只做出了一题了.A题呆滞的看了很久,领悟到了出题者的暗示,应该就是两个点的时候最大吧,不然的话这题肯定特别难敲,YY一发交上去然后就过了.然后就在不停地YY B ...

随机推荐

  1. MySQL用命令行复制表的方法

    mysql中用命令行复制表结构的方法主要有一下几种: 1.只复制表结构到新表 ; 或 CREATE TABLE 新表 LIKE 旧表 ; 注意上面两种方式,前一种方式是不会复制时的主键类型和自增方式是 ...

  2. android设置view透明度的效果

    android设置view透明度的效果 推荐textView.setBackgroundColor(Color.TRANSPARENT);     第一种方法:在xml文件中设置背景颜色. andro ...

  3. (转)cocos2dx 内存管理

    原文地址:http://blog.csdn.net/ring0hx/article/details/7946397 cocos2dx的内存管理移植自Objective-C, 对于没有接触过OC的C++ ...

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

  5. nginix 笔记

    1. 一个master进程,多个worker进程,worker进程数目可自动配置为核的数目 2. 配置文件ngnix.conf存放在linux的/etc/ngnix目录下

  6. Android 模仿QQ空间风格的 UI(转)

    本文内容 环境 演示模仿QQ空间风格的UI 虽然这个 UI 跟现在的QQ空间有点差别,但是也能学到很多东西. 下载 Demo 环境 Windows 7 64 位 Eclipse ADT V22.6.2 ...

  7. 每天一条Linux命令(OS X系统上操作)

     Linux菜鸟必学的60个命令 安装和登录命令:login.shutdown.halt.reboot.install.mount.umount.chsh.exit.last: 文件处理命令:file ...

  8. 线程技术 ☞ Future模式

    线程技术可以让我们的程序同时做多件事情,线程的工作模式有很多,常见的一种模式就是处理网站的并发,今天我来说说线程另一种很常见的模式,这个模式和前端里的ajax类似:浏览器一个主线程执行javascri ...

  9. 关于c#流

     C#流的简单认识 前言 本篇文章简单总结了在C#编程中经常会用到的一些流.比如说FileStream.MemoryStream. BufferedStream. NetWorkStream. Str ...

  10. 在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移

    在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移 最近发布的ASP.NET MVC 5 及Visual ...