// 对于延迟更新,我们在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 整理一下线段树的写法的更多相关文章

  1. HDU 1828 / POJ 1177 Picture (线段树扫描线,求矩阵并的周长,经典题)

    做这道题之前,建议先做POJ 1151  Atlantis,经典的扫描线求矩阵的面积并 参考连接: http://www.cnblogs.com/scau20110726/archive/2013/0 ...

  2. poj 3277 City Horizon (线段树 扫描线 矩形面积并)

    题目链接 题意: 给一些矩形,给出长和高,其中长是用区间的形式给出的,有些区间有重叠,最后求所有矩形的面积. 分析: 给的区间的范围很大,所以需要离散化,还需要把y坐标去重,不过我试了一下不去重 也不 ...

  3. POJ 2777 Count Color (线段树成段更新+二进制思维)

    题目链接:http://poj.org/problem?id=2777 题意是有L个单位长的画板,T种颜色,O个操作.画板初始化为颜色1.操作C讲l到r单位之间的颜色变为c,操作P查询l到r单位之间的 ...

  4. POJ 2828 Buy Tickets (线段树 or 树状数组+二分)

    题目链接:http://poj.org/problem?id=2828 题意就是给你n个人,然后每个人按顺序插队,问你最终的顺序是怎么样的. 反过来做就很容易了,从最后一个人开始推,最后一个人位置很容 ...

  5. poj 2777 Count Color(线段树)

    题目地址:http://poj.org/problem?id=2777 Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

  6. poj 2828 Buy Tickets (线段树(排队插入后输出序列))

    http://poj.org/problem?id=2828 Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissio ...

  7. poj 3264 Balanced Lineup(线段树、RMQ)

    题目链接: http://poj.org/problem?id=3264 思路分析: 典型的区间统计问题,要求求出某段区间中的极值,可以使用线段树求解. 在线段树结点中存储区间中的最小值与最大值:查询 ...

  8. poj 2777 Count Color(线段树区区+染色问题)

    题目链接:  poj 2777 Count Color 题目大意:  给出一块长度为n的板,区间范围[1,n],和m种染料 k次操作,C  a  b  c 把区间[a,b]涂为c色,P  a  b 查 ...

  9. POJ 2991 Crane(线段树+计算几何)

    POJ 2991 Crane 题目链接 题意:给定一个垂直的挖掘机臂.有n段,如今每次操作能够旋转一个位置,把[s, s + 1]专程a度,每次旋转后要输出第n个位置的坐标 思路:线段树.把每一段当成 ...

随机推荐

  1. go区分操作系统

    package main import ( "fmt" "runtime" ) func main() { fmt.Println("Go runs ...

  2. Leetcode题目283.移动零(简单)

    题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原 ...

  3. ELK日志解决方案

    1.方案整体设计 FileBeats+Logstash+ElasticSearch+Kibana 1)ElasticSearch 简称ES,用来做日志数据的存储,当然也可以存储其他数据, ES是互联网 ...

  4. dd 命令

    dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: if=文件名:输入文件名 ...

  5. vue 项目 使用sass以及注意事项

    vue 项目 使用sass以及注意事项 1,安装依赖: npm install node-sass --save-dev npm install sass-loader --save-dev 注: 通 ...

  6. python小白之字典使用笔记

    Python 字典(Dictionary)   字典是一种可变容器模型,且可存储任意类型对象. 每个键值 key=>value 对,用冒号 : 分割 每个键值对之间用逗号 , 分割 整个字典包括 ...

  7. <frameset>和<body>不能共用

    frameset 定义: frameset 元素可定义一个框架集.它被用来组织多个窗口(框架).每个框架存有独立的文档.在其最简单的应用中,frameset 元素仅仅会规定在框架集中存在多少列或多少行 ...

  8. [服务器时区问题]PHP Warning: strftime(): It is not safe to rely on the system's timezone set

    PHP Warning: strftime(): It is not safe to rely on the system's timezone set 当运行一些程序时,在httpd日志中会有如下警 ...

  9. 9Flutter GridView组件 以及动态GridView

    main.dart import 'package:flutter/material.dart'; import 'res/listData.dart'; /* GridView : 通过GridVi ...

  10. iOS优秀第三方框架

    1.数据库操作:BGDB_OC 2.腾讯崩溃检测: Bugly 3.强大易用的bug收集管理工具: Bugtags 4.访问本地相册,选择多张图片: HMImagePicker 5.iOS颜色库: W ...