洛谷P3372

 //线段树  询问区间和,支持区间修改
#include <cstdio> using namespace std; struct treetype
{
int l,r;
long long sum,d;
}; const int maxn=; treetype a[maxn<<];
long long num[maxn]; void build(int k,int l,int r)
{
a[k].l=l;a[k].r=r;a[k].d=;
if (a[k].l==a[k].r)
{
a[k].sum=num[l];
return;
}
int mid=(l+r)>>,i=k<<;
build(i,l,mid);
build(i+,mid+,r);
a[k].sum=a[i].sum+a[i+].sum;
}
void pushdown(int k)
{
if (a[k].l==a[k].r) a[k].d=;
if (a[k].d==) return;
//int i=k<<1;long long t=a[i].r-a[i].l+1;a[i].sum+=t*a[k].d;a[i].d+=a[k].d;
//i++;t=a[i].r-a[i].l+1;a[i].sum+=t*a[k].d;a[i].d+=a[k].d;
int i=k<<;a[i].sum+=(a[i].r-a[i].l+)*a[k].d;a[i].d+=a[k].d;
i++;a[i].sum+=(a[i].r-a[i].l+)*a[k].d;a[i].d+=a[k].d;
a[k].d=;
}
void change(int k,int l,int r,long long d)
{
pushdown(k);
if (l<=a[k].l && a[k].r<=r)
{
//long long t=a[k].r-a[k].l+1;
a[k].sum+=(a[k].r-a[k].l+)*d;a[k].d=d;
return;
}
int mid=(a[k].l+a[k].r)>>,i=k<<;
if (l<=mid) change(i,l,r,d);
if (mid<r) change(i+,l,r,d);
a[k].sum=a[i].sum+a[i+].sum;
}
long long query(int k,int l,int r)
{
pushdown(k);
if (l<=a[k].l && a[k].r<=r) return a[k].sum;
int mid=(a[k].l+a[k].r)>>,i=k<<;
long long ans=;
if (l<=mid) ans=query(i,l,r);
if (mid<r) ans+=query(i+,l,r);
return ans;
} int main()
{
int n,m;
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%lld",&num[i]);
build(,,n);
for (int i=;i<=m;i++)
{
int p,x,y;
scanf("%d%d%d",&p,&x,&y);
if (p==)
{
long long k;
scanf("%lld",&k);
change(,x,y,k);
}
else printf("%lld\n",query(,x,y));
}
return ;
}

poj3468

 //线段树  询问区间和,支持区间修改
#include <cstdio> using namespace std; struct treetype
{
int l,r;
long long sum,d;
}; const int maxn=; treetype a[maxn<<];
long long num[maxn]; void build(int k,int l,int r)
{
a[k].l=l;a[k].r=r;a[k].d=;
if (a[k].l==a[k].r)
{
a[k].sum=num[l];
return;
}
int mid=(l+r)>>,i=k<<;
build(i,l,mid);
build(i+,mid+,r);
a[k].sum=a[i].sum+a[i+].sum;
}
void pushdown(int k)
{
if (a[k].l==a[k].r) a[k].d=;
if (a[k].d==) return;
int i=k<<;a[i].sum+=(a[i].r-a[i].l+)*a[k].d;a[i].d+=a[k].d;
i++;a[i].sum+=(a[i].r-a[i].l+)*a[k].d;a[i].d+=a[k].d;
a[k].d=;
}
void change(int k,int l,int r,long long d)
{
pushdown(k);
if (l<=a[k].l && a[k].r<=r)
{
a[k].sum+=(a[k].r-a[k].l+)*d;a[k].d=d;
return;
}
int mid=(a[k].l+a[k].r)>>,i=k<<;
if (l<=mid) change(i,l,r,d);
if (mid<r) change(i+,l,r,d);
a[k].sum=a[i].sum+a[i+].sum;
}
long long query(int k,int l,int r)
{
pushdown(k);
if (l<=a[k].l && a[k].r<=r) return a[k].sum;
int mid=(a[k].l+a[k].r)>>,i=k<<;
long long ans=;
if (l<=mid) ans=query(i,l,r);
if (mid<r) ans+=query(i+,l,r);
return ans;
} int main()
{
int n,m;
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%lld",&num[i]);
build(,,n);
for (int i=;i<=m;i++)
{
char p;scanf("%c",&p);
int x,y;
scanf("%c%d%d",&p,&x,&y);
if (p=='C')
{
long long k;
scanf("%lld",&k);
change(,x,y,k);
}
else printf("%lld\n",query(,x,y));
}
return ;
}

洛谷P3372/poj3468(线段树lazy_tag)(询问区间和,支持区间修改)的更多相关文章

  1. 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)

    To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...

  2. 【洛谷】【线段树】P3353 在你窗外闪耀的星星

    [题目描述:] /* 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀 ...

  3. 【洛谷】【线段树】P1886 滑动窗口

    [题目描述:] 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. [输入格式:] 输入一共 ...

  4. 洛谷P3374(线段树)(询问区间和,支持单点修改)

    洛谷P3374 //询问区间和,支持单点修改 #include <cstdio> using namespace std; ; struct treetype { int l,r,sum; ...

  5. 【洛谷】【线段树】P1471 方差

    [题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差 ...

  6. 洛谷P5280 [ZJOI2019]线段树

      https://www.luogu.org/problemnew/show/P5280 省选的时候后一半时间开这题,想了接近两个小时的各种假做法,之后想的做法已经接近正解了,但是有一些细节问题理不 ...

  7. 【洛谷】【线段树】P1047 校门外的树

    [题目描述:] 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L ...

  8. 洛谷 - P1198 - 最大数 - 线段树

    https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...

  9. 洛谷 P2391 白雪皑皑 线段树+优化

    题目描述: 现在有 \(N\) 片雪花排成一列. Pty 要对雪花进行$ M $次染色操作,第 \(i\)次染色操作中,把\((i*p+q)%N+1\) 片雪花和第\((i*q+p)%N+1\)片雪花 ...

随机推荐

  1. 【CDN+】 CDN项目的两大核心--缓存与回源

    前言 项目中碰到CDN专用名词: 回源, 然后不知道什么意思,反过来查询了一下CDN相关的一些基本术语,特做记录 CDN基础概念 CDN (Content Delivery Network,即内容分发 ...

  2. Win10.设置(放大)

    1.ZC:我从感觉,我在Win10 里面截图 貌似被放大了,尤其是 在往cnblogs里面贴图的时候  比较明显,于是 度娘“Win10 自动放大”,找到如下帖子,里面有 2种设置方式: win10系 ...

  3. Git006--管理修改

    Git--管理修改 本文来自于:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ ...

  4. Java IO(3)

    字符流相关 字符流基本上可以类比字节流 只不过是将字节流的byte 换为char. 最根本的两个类是Reader以及Writer Reader的子类有:BufferedReader, CharArra ...

  5. 基于Select模型的Windows TCP服务端和客户端程序示例

    最近跟着刘远东老师的<C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台)>,Bilibili视频地址为C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台),重新复习下 ...

  6. Ubuntu下的图形化多线程下载器XDM

    目录 1.下载 2.安装 3.浏览器支持 使用Ubuntu下载东西经常过于缓慢,因此需要多进程下载器. 1.下载 下载链接:http://xdman.sourceforge.net/#download ...

  7. jmeter 添加header

    接口说明文档: article.fetch(通用转码服务) 通用转码服务,获取任意 url 的正文以及 title 等基本信息,仅支持 post 方法请求. 参数 参数 类型 是否必须 示例 其它说明 ...

  8. RedHat可用的几处软件源

    rpmforge仓库 http://repoforge.org/use/ http://rpms.famillecollet.com/

  9. redis 持久化 哨兵 主从

    Redis搭建步骤 环境: 三台机器  centos7 关闭防火墙 selinux Redis版本 3.0.5 依赖环境 yum install gcc-c++ ruby rubygems –y 把版 ...

  10. python学习三十四天函数高阶函数定义及用法

    python函数高阶函数是把函数当成一个变量,传递给函数作为参数,或者函数的返回值里面有函数,都称为高阶函数, 1,把函数作为参数传递 def dac(x,y): return x+y def tes ...