POJ A Simple Problem with Integers | 线段树基础练习
#include<cstdio>
#include<algorithm>
#include<cstring>
typedef long long ll;
#define N 100010
using namespace std;
struct node
{
ll l,r,lz,sum;
}t[*N];
ll read()
{
ll ret=,neg=;
char j=getchar();
for (;j>'' || j<'';j=getchar())
if (j=='-') neg=-;
for (;j<='' && j>='';j=getchar())
ret=ret*+j-'';
return ret*neg;
}
ll n,q,a[N],l,r,k;
void pushup(ll p)
{
t[p].sum=t[*p].sum+t[*p+].sum;
}
void pushdown(ll p)
{
if (t[p].l==t[p].r || t[p].lz==) return;
ll tmp=t[p].lz,mid=(t[p].r+t[p].l)>>;
t[*p].sum+=(mid-t[p].l+)*tmp;
t[*p+].sum+=(t[p].r-mid)*tmp;
t[*p].lz+=tmp;
t[*p+].lz+=tmp;
t[p].lz=;
}
void build(ll p,ll l,ll r)
{
t[p].l=l,t[p].r=r;
if (l!=r)
{
ll mid=l+r>>;
build(*p,l,mid);
build(*p+,mid+,r);
pushup(p);
}
else
t[p].sum=a[l];
}
void modify(ll p,ll l,ll r,ll k)
{
ll L=t[p].l,R=t[p].r,mid=(L+R)>>;
if (l==L && r==R)
{
t[p].sum+=(r-l+)*k;
t[p].lz+=k;
return ;
}
pushdown(p);
if (r<=mid)
modify(*p,l,r,k);
else if (l>mid)
modify(*p+,l,r,k);
else modify(*p,l,mid,k),modify(*p+,mid+,r,k);
pushup(p);
}
ll query(ll p,ll l,ll r)
{
ll L=t[p].l,R=t[p].r,mid=(L+R)>>;
if (l==L && r==R)
return t[p].sum;
pushdown(p);
if (r<=mid)
return query(*p,l,r);
if (l>mid) return query(*p+,l,r);
return query(*p,l,mid)+query(*p+,mid+,r);
}
char op[N];
int main()
{
n=read(),q=read();
for (int i=;i<=n;i++)
a[i]=read();
build(,,n);
while (q--)
{
scanf("%s",op);
if (op[]=='Q')
l=read(),r=read(),printf("%lld\n",query(,l,r));
else l=read(),r=read(),k=read(),modify(,l,r,k);
}
return ;
}
POJ A Simple Problem with Integers | 线段树基础练习的更多相关文章
- Poj 3468-A Simple Problem with Integers 线段树,树状数组
题目:http://poj.org/problem?id=3468 A Simple Problem with Integers Time Limit: 5000MS Memory Limit ...
- POJ A Simple Problem with Integers 线段树 lazy-target 区间跟新
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 105742 ...
- POJ 3468A Simple Problem with Integers(线段树区间更新)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 112228 ...
- 2018 ACMICPC上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节) 链接:https://ac.nowcoder.co ...
- poj 3468 A Simple Problem with Integers 线段树第一次 + 讲解
A Simple Problem with Integers Description You have N integers, A1, A2, ... , AN. You need to deal w ...
- [POJ] 3468 A Simple Problem with Integers [线段树区间更新求和]
A Simple Problem with Integers Description You have N integers, A1, A2, ... , AN. You need to deal ...
- poj 3468 A Simple Problem with Integers 线段树区间加,区间查询和
A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?i ...
- poj 3468 A Simple Problem with Integers 线段树区间加,区间查询和(模板)
A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?i ...
- poj 3468 A Simple Problem with Integers (线段树区间更新求和lazy思想)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 75541 ...
随机推荐
- 洛谷P1968 美元汇率
题目背景 此处省略maxint+1个数 题目描述 在以后的若干天里戴维将学习美元与德国马克的汇率.编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值. 输入输出格式 ...
- Selenium页面加载策略
https://blog.csdn.net/wkb342814892/article/details/81611737 https://blog.csdn.net/ouyanggengcheng/ar ...
- dts--tests(四)
unit_tests.py """ DPDK Test suite. This TestSuite runs the unit tests included in DPD ...
- 【PHP基础】序列化serialize()与反序列化unserialize()
序列化serialize()与反序列化unserialize(): 序列化serialize():就是将一个变量所代表的 “内存数据”转换为“字符串”的形式,并持久保存在硬盘(写入文件中保存)上的一种 ...
- Apache2服务配置ubuntu16.04+django1.11
话不多说直接上步骤 环境 Ubuntu 16.04 Python 3.5.2 Django 1.11 Apache 2.4 1.Apache2安装 sudo apt-get install apach ...
- C语言基础篇(三) 指针
导航: 1.指针 2. 数组 3. 结构体,共用体 4. 内存分布图 5. 段错误分析 ----->x<------------->x<---- ...
- 笔记-git-.gitignore
笔记-git-.gitignore 1. git忽略文件 有的文件不需要提交到公共仓库中,为此git提供了三种实现方式. gitignore文件 在项目的设置中指定排除文件 定义全局.git ...
- saltstack plug in
目录 可插拔的子系统 灵活性 虚拟模块 salt的核心架构提供了一种高速的交流总线,在核心架构的上层,salt暴露出来的特征是:松散耦合,可插拔的子系统. 可插拔的子系统 salt包含20中插件系统, ...
- PHP.TP框架下商品项目的优化2-图片优化
图片存储.上传.显示优化 1.图片路径写进配置文件,当路径有变动时[因业务扩大,服务器存储图片空间不足等],只需修改配置文件,而不用修改代码 2.封装显示.上传.删除函数,实现代码重用 [可类比其他类 ...
- is 和 == 的区别,utf和gbk的转换,join用法
is 和 == 的区别 # is 比较的是内存地址 # == 比较的是值 a = 'alex' b = 'alex' #int,str(小数据池)会被缓存,为了节约内存 print(id(a),id( ...