总时间限制: 
10000ms

单个测试点时间限制: 
1000ms

内存限制: 
262144kB
描述

给一个长为N的数列,有M次操作,每次操作是以下两种之一:

(1)将某连续一段同时改成一个数

(2)求数列中某连续一段的和

输入
第一行两个正整数N和M。
第二行N的整数表示这个数列。
接下来M行,每行开头是一个字符,若该字符为'M',则表示一个修改操作,接下来三个整数x、y和z,表示在[x,y]这段区间的数改为z;若该字符为'Q',则表示一个询问操作,接下来两个整数x和y,表示求[x,y]这段区间的和。
输出
对每一个询问操作单独输出一行,表示答案。
样例输入
5 3
1 2 3 4 5
Q 1 5
M 2 3 2
Q 3 5
样例输出
15
11
提示
1<=N<=10^5,1<=M<=10^5,输入保证合法,且所有整数及答案可用带符号32位整型存储。
对于线段树的直接修改,
我们首先考虑要维护一个修改标记,
注意这个标记是可以每次被覆盖的!
然后值直接区间修改就好
 #include<iostream>
#include<cstdio>
#include<cstring>
#define ls k<<1
#define rs k<<1|1
using namespace std;
const int MAXN=;
const int maxn=0x7ffff;
void read(int &n)
{
char c='+';int x=;bool flag=;
while(c<''||c>''){c=getchar();if(c=='-')flag=;}
while(c>=''&&c<='')
x=(x<<)+(x<<)+c-,c=getchar();
flag==?n=-x:n=x;
}
int n,m;
int ans=;
struct node
{
int l,r,w,f;
node()
{
l=r=w=;
f=-maxn;
}
}tree[MAXN<<];
void update(int k)
{
tree[k].w=tree[ls].w+tree[rs].w;
}
void build(int ll,int rr,int k)
{
tree[k].l=ll;tree[k].r=rr;
if(ll==rr)
{
read(tree[k].w);
return ;
}
int mid=(ll+rr)>>;
build(ll,mid,ls);
build(mid+,rr,rs);
update(k);
}
void push(int k)
{
tree[ls].w=(tree[ls].r-tree[ls].l+)*tree[k].f;
tree[rs].w=(tree[rs].r-tree[rs].l+)*tree[k].f;
tree[ls].f=tree[k].f;
tree[rs].f=tree[k].f;
tree[k].f=-maxn; }
void change(int k,int wl,int wr,int v)
{
if(wr<tree[k].l||wl>tree[k].r)
return ;
if(wl<=tree[k].l&&tree[k].r<=wr)
{
tree[k].w=(tree[k].r-tree[k].l+)*v;
tree[k].f=v;
return ;
}
int mid=(tree[k].l+tree[k].r)>>;
if(tree[k].f!=-maxn)
push(k);
change(ls,wl,wr,v);
change(rs,wl,wr,v);
update(k);
}
void ask(int k,int wl,int wr)
{
if(wr<tree[k].l||wl>tree[k].r)
return ;
if(wl<=tree[k].l&&tree[k].r<=wr)
{
ans+=tree[k].w;
return ;
}
int mid=(tree[k].l+tree[k].r)>>;
if(tree[k].f!=-maxn)
push(k);
ask(ls,wl,wr);
ask(rs,wl,wr);
update(k);
}
int main()
{
read(n);read(m);
build(,n,);
for(int i=;i<=m;i++)
{
char c;int x,y;
cin>>c;
read(x);read(y);
if(c=='M')
{
int v;
read(v);
change(,x,y,v);
}
else
{
ans=;
ask(,x,y);
printf("%d\n",ans);
}
}
return ;
}
: Challenge 5最近的提交

12:Challenge 5(线段树区间直接修改)的更多相关文章

  1. hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)

    #1078 : 线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题 ...

  2. Codeforces Round #442 (Div. 2) E Danil and a Part-time Job (dfs序加上一个线段树区间修改查询)

    题意: 给出一个具有N个点的树,现在给出两种操作: 1.get x,表示询问以x作为根的子树中,1的个数. 2.pow x,表示将以x作为根的子树全部翻转(0变1,1变0). 思路:dfs序加上一个线 ...

  3. 题解报告:hdu 1698 Just a Hook(线段树区间修改+lazy懒标记的运用)

    Problem Description In the game of DotA, Pudge’s meat hook is actually the most horrible thing for m ...

  4. poj 2528 线段树区间修改+离散化

    Mayor's posters POJ 2528 传送门 线段树区间修改加离散化 #include <cstdio> #include <iostream> #include ...

  5. E - Just a Hook HDU - 1698 线段树区间修改区间和模版题

    题意  给出一段初始化全为1的区间  后面可以一段一段更改成 1 或 2 或3 问最后整段区间的和是多少 思路:标准线段树区间和模版题 #include<cstdio> #include& ...

  6. HDU 4027 Can you answer these queries? (线段树区间修改查询)

    描述 A lot of battleships of evil are arranged in a line before the battle. Our commander decides to u ...

  7. poj2528 Mayor's posters(线段树区间修改+特殊离散化)

    Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral electio ...

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

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

  9. HDU 4509 湫湫系列故事——减肥记II(线段树-区间覆盖 或者 暴力技巧)

    http://acm.hdu.edu.cn/showproblem.php?pid=4509 题目大意: 中文意义,应该能懂. 解题思路: 因为题目给的时间是一天24小时,而且还有分钟.为了解题方便, ...

随机推荐

  1. 38.Qt模型/视图结构

    1.模型/视图类 2.模型 3.视图 4.代理 1 模型/视图类 InterView框架提供了一些可以直接使用的模型类和视图类,如QStandardModel类,QDirModel类,QStringL ...

  2. 2.Matlab数值数组及其运算

    2.1引导 2.2一维数组的创建与寻访 2.3二维数组的创建 2.4二维数组元素的标识 2.5二维数组的子数组寻访和赋值 2.6执行数组运算的常用函数 2.7数组运算和矩阵运算 2.8多项式的表达和创 ...

  3. POJ 2665 模拟,,

    It is confirmed that these sections do not overlap with each other. 一句话 就变成水题了,,, // by SiriusRen #i ...

  4. ZYQAssetPickerController的使用,不错的图片选择

    import UIKit class ViewController: UIViewController,ZYQAssetPickerControllerDelegate,UIImagePickerCo ...

  5. java同步锁的正确使用

    同步锁分类 对象锁(this) 类锁(类的字节码文件对象即类名.class) 字符串锁(比较特别) 应用场景 在多线程下对共享资源的安全操作. 需求:启动5个线程对共享资源total进行安全操作. 同 ...

  6. 1到32 数字正则 还有IP的

    正则是按位解析匹配的,所以[1-32]是不行的. 解析: 1.1-32,包含1位数(1-9)和2位数(10-32) 2.10-32必须切割,10-19和20-29形式一样,得到[12][0-9],30 ...

  7. vue-cli 3.0 安装和创建项目流程

    使用前我们先了解下3.0较2.0有哪些区别 一.3.0 新加入了 TypeScript 以及 PWA 的支持二.部分命令发生了变化: 1.下载安装  npm install -g vue@cli 2. ...

  8. Maintain Aspect Ratio Mixin

    Maintain Aspect Ratio Mixin Maintain the aspect ratio of a div with CSS RESPONSIVE ASPECT RATIOS WIT ...

  9. Smalltalk

    Smalltalk is an object-oriented, dynamically typed, reflective programming language. Smalltalk was o ...

  10. Github添加SSHkey

    Git详细教程可参考廖雪峰的Git教程 1. 打开 Git Bash,输入cd ~/.ssh——回车(看你是否有了ssh key 密钥,有了就备份): 2. 输入ssh-keygen -t rsa - ...