poj 3468 整理一下线段树的写法
// 对于延迟更新,我们在updata 和query的时候 pushdown和pushup两个东西都要存在 #include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
typedef long long ll;
struct node
{
ll l,r,sum,add;
} tree[*];
ll a[];
//ll x,y;
void pushup(int id)
{
tree[id].sum=tree[id*].sum+tree[id*+].sum;
}
void build(ll l,ll r,int id)
{
if(l==r)
{
tree[id].sum=a[l];
return;
}
tree[id].l=l;
tree[id].r=r;
tree[id].add=;
ll mid=(l+r)/;
build(l,mid,id*);
build(mid+,r,id*+);
pushup(id);
}
void pushdown(int id)
{
if(tree[id].add)
{
tree[id*].add +=tree[id].add;
tree[id*+].add += tree[id].add; tree[id*].sum += (tree[id*].r-tree[id*].l+)*(tree[id*].add);
tree[id*+].sum += (tree[id*+].r-tree[id*+].l+)*(tree[id*+].add);
tree[id].add=;
}
} void updata(ll x,ll y,ll l,ll r,int id,ll k)
{
if(x<=l && r<=y)// 在区间里面 就可以做一定操作
{
tree[id].sum += (r-l+)*k;
tree[id].add += k;
return;
}
pushdown(id);//
ll mid=(l+r)/;
if(x <= mid) updata(x,y,l,mid,id*,k);
if(y > mid) updata(x,y,mid+,r,id*+,k);
pushup(id);
} ll query(ll x,ll y,ll l,ll r,int id)
{
if(x<=l && r<=y)
{
return tree[id].sum;
}
pushdown(id);
ll mid=(l+r)/;
ll sum=;
if(x<=mid) sum+=query(x,y,l,mid,id*);
if(y>mid) sum+=query(x,y,mid+,r,id*+);
pushup(id);//
return sum;
}
int main()
{
int n,q;
ll x,y,k;
while(scanf("%d %d",&n,&q)!=EOF)
{
for(int i=; i<=n; i++)
{
scanf("%d",&a[i]);
}
build(,n,);
while(q--)
{
char s[];
scanf("%s",s);
if(s[]=='Q')
{
scanf("%lld %lld",&x,&y);
printf("%lld\n",query(x,y,,n,));
}
else if(s[]=='C')
{
scanf("%lld %lld %lld",&x,&y,&k);
updata(x,y,,n,,k);
}
}
} return ;
}
poj 3468 整理一下线段树的写法的更多相关文章
- HDU 1828 / POJ 1177 Picture (线段树扫描线,求矩阵并的周长,经典题)
做这道题之前,建议先做POJ 1151 Atlantis,经典的扫描线求矩阵的面积并 参考连接: http://www.cnblogs.com/scau20110726/archive/2013/0 ...
- poj 3277 City Horizon (线段树 扫描线 矩形面积并)
题目链接 题意: 给一些矩形,给出长和高,其中长是用区间的形式给出的,有些区间有重叠,最后求所有矩形的面积. 分析: 给的区间的范围很大,所以需要离散化,还需要把y坐标去重,不过我试了一下不去重 也不 ...
- POJ 2777 Count Color (线段树成段更新+二进制思维)
题目链接:http://poj.org/problem?id=2777 题意是有L个单位长的画板,T种颜色,O个操作.画板初始化为颜色1.操作C讲l到r单位之间的颜色变为c,操作P查询l到r单位之间的 ...
- POJ 2828 Buy Tickets (线段树 or 树状数组+二分)
题目链接:http://poj.org/problem?id=2828 题意就是给你n个人,然后每个人按顺序插队,问你最终的顺序是怎么样的. 反过来做就很容易了,从最后一个人开始推,最后一个人位置很容 ...
- poj 2777 Count Color(线段树)
题目地址:http://poj.org/problem?id=2777 Count Color Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- poj 2828 Buy Tickets (线段树(排队插入后输出序列))
http://poj.org/problem?id=2828 Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissio ...
- poj 3264 Balanced Lineup(线段树、RMQ)
题目链接: http://poj.org/problem?id=3264 思路分析: 典型的区间统计问题,要求求出某段区间中的极值,可以使用线段树求解. 在线段树结点中存储区间中的最小值与最大值:查询 ...
- poj 2777 Count Color(线段树区区+染色问题)
题目链接: poj 2777 Count Color 题目大意: 给出一块长度为n的板,区间范围[1,n],和m种染料 k次操作,C a b c 把区间[a,b]涂为c色,P a b 查 ...
- POJ 2991 Crane(线段树+计算几何)
POJ 2991 Crane 题目链接 题意:给定一个垂直的挖掘机臂.有n段,如今每次操作能够旋转一个位置,把[s, s + 1]专程a度,每次旋转后要输出第n个位置的坐标 思路:线段树.把每一段当成 ...
随机推荐
- zabbix监控项整理Items-key
agent.hostname:hostname,字符串 agent.ping:可用性检查,可用返回1:不可用返回空 agent.version:agent程序的版本,返回字符串 kernel.maxf ...
- 深入探索REST(2):理解本真的REST架构风格
文章转载地址:https://www.infoq.cn/article/understanding-restful-style/,如引用请标注文章原地址 引子 在移动互联网.云计算迅猛发展的今天,作为 ...
- android studio的安装和配置及解决uiautomatorviewer报错
参考博客:https://www.cnblogs.com/singledogpro/p/9551841.html 安装Android Studio 走了不少弯路,现在整理出来,仅当备忘使用. 首先要先 ...
- Jmeter启动闪退
背景:使用Jmeter进行性能测试脚本开发,实现Jmeter接口开发Java请求 问题再现: 1.在官网上下载Jmeter3.2版本,打开jmeter.bat,启动成功 2.在IDEA中创建测试项目和 ...
- osg ifc ifccolumn
- python图论包networks(最短路,最小生成树带包)
官方文档: https://networkx.github.io/documentation/networkx-1.10/reference/algorithms.html 最短路和最小生成树: im ...
- Spring Aop(十二)——编程式的创建Aop代理之AspectjProxyFactory
转发地址:https://www.iteye.com/blog/elim-2397922 编程式的创建Aop代理之AspectjProxyFactory 之前已经介绍了一款编程式的创建Aop代理的工厂 ...
- SpringBoot: 13.异常处理方式3(使用@ControllerAdvice+@ExceptionHandle注解)(转)
问题:使用@ExceptionHandle注解需要在每一个controller代码里面都添加异常处理,会咋成代码冗余 解决方法:新建一个全局异常处理类,添加@ControllerAdvice注解即可 ...
- 关于macOS上常用操作命令(持续更新)
1.mac上显示/隐藏Finder中的隐藏文件: 显示隐藏文件:在终端中输代码“defaults write com.apple.finder AppleShowAllFiles -boolean t ...
- switch/catch
public class SwitchTest { public static void main(String[] args) { String param = null; switch (para ...