poj_3468线段树成段更新求区间和
#include<iostream>
#include<string.h>
#include<cstdio>
long long num[100010];
using namespace std;
struct st
{
int l;
int r;
long long sum;
long long a;
} p[400100];
void build(int t,int l,int r)
{
p[t].l=l;
p[t].r=r;
if(l==r-1)
{
p[t].sum=num[l];
return;
}
int mid=(l+r)/2;
build(t*2+1,mid,r);
build(t*2,l,mid);
p[t].sum=p[t*2].sum+p[t*2+1].sum;
}
void update(int t,int l,int r,int v)
{
if(p[t].l==l&&p[t].r==r)
{
p[t].a += v;
p[t].sum += v*(r -l);
return ;
}
if( p[t].a )
{
p[2*t+1].a += p[t].a;
p[2*t].a += p[t].a;
p[2*t+1].sum += p[t].a*(p[2*t+1].r -p[2*t+1].l);
p[2*t].sum += p[t].a*(p[2*t].r -p[2*t].l);
p[t].a = 0;
}
int mid = (p[t].l+p[t].r)/2;
if( l >= mid )
update(2*t+1,l,r,v);
else
if( r <= mid )
update(2*t,l,r,v);
else
{
update(2*t,l,mid,v);
update(2*t+1,mid,r,v);
}
p[t].sum = p[2*t].sum + p[2*t+1].sum;
}
long long query(int t,int l,int r)
{
if(p[t].l == l && p[t].r == r )
return p[t].sum;
if( p[t].a )
{
p[2*t+1].a += p[t].a;
p[2*t].a += p[t].a;
p[2*t+1].sum +=p[t].a*(p[2*t+1].r - p[2*t+1].l);
p[2*t].sum += p[t].a*(p[2*t].r - p[2*t].l);
p[t].a = 0;
}
int mid =(p[t].l+p[t].r)/2;
if( l >= mid )
return query(2*t+1,l,r);
else
if( r <= mid )
return query(2*t,l,r);
else
return query(2*t,l,mid) + query(2*t+1,mid,r);
}
int main()
{
int n,q;
while(scanf("%d%d",&n,&q)!=EOF)
{
for(int i=0; i<n; i++)
scanf("%lld",&num[i]);
memset(p,0,sizeof(p));
build(1,0,n+1);
getchar();
for(int i=0; i<q; i++)
{
char c;
scanf("%c",&c);
if(c=='Q')
{
int x,y;
scanf("%d%d",&x,&y);
getchar();
printf("%lld\n",query(1,x-1,y));
}
else if(c=='C')
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
getchar();
update(1,x-1,y,z);
}
} }
return 0;
}
poj_3468线段树成段更新求区间和的更多相关文章
- poj_3468,线段树成段更新
参考自http://www.notonlysuccess.com/index.php/segment-tree-complete/ #include<iostream> #include& ...
- HDU1698_Just a Hook(线段树/成段更新)
解题报告 题意: 原本区间1到n都是1,区间成段改变成一个值,求最后区间1到n的和. 思路: 线段树成段更新,区间去和. #include <iostream> #include < ...
- POJ3468_A Simple Problem with Integers(线段树/成段更新)
解题报告 题意: 略 思路: 线段树成段更新,区间求和. #include <iostream> #include <cstring> #include <cstdio& ...
- HDU 3577 Fast Arrangement ( 线段树 成段更新 区间最值 区间最大覆盖次数 )
线段树成段更新+区间最值. 注意某人的乘车区间是[a, b-1],因为他在b站就下车了. #include <cstdio> #include <cstring> #inclu ...
- hdu 4747【线段树-成段更新】.cpp
题意: 给出一个有n个数的数列,并定义mex(l, r)表示数列中第l个元素到第r个元素中第一个没有出现的最小非负整数. 求出这个数列中所有mex的值. 思路: 可以看出对于一个数列,mex(r, r ...
- poj 3468 A Simple Problem with Integers 【线段树-成段更新】
题目:id=3468" target="_blank">poj 3468 A Simple Problem with Integers 题意:给出n个数.两种操作 ...
- 线段树(成段更新) POJ 3468 A Simple Problem with Integers
题目传送门 /* 线段树-成段更新:裸题,成段增减,区间求和 注意:开long long:) */ #include <cstdio> #include <iostream> ...
- HDU-1698-Just a Hook-区间更新+线段树成段更新
In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. T ...
- ACM: Copying Data 线段树-成段更新-解题报告
Copying Data Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description W ...
随机推荐
- iOS_自己定义毛玻璃效果
终于效果图: 关键代码: UIImage分类代码 // // UIImage+BlurGlass.h // 帅哥_团购 // // Created by beyond on 14-8-30. // C ...
- Mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。
将select出的结果再通过中间表select一遍,这样就规避了错误.注意,这个问题只出现于mysql,mssql和oracle不会出现此问题. mysql中You can't specify tar ...
- audio_coding模块分析和audio_conference_mixer模块分析
audio_coding 1. 主要接口 AudioCodingModuleImpl::RegisterReceiveCodec 初始化Codec AudioCodingModul ...
- mahout demo——本质上是基于Hadoop的分步式算法实现,比如多节点的数据合并,数据排序,网路通信的效率,节点宕机重算,数据分步式存储
摘自:http://blog.fens.me/mahout-recommendation-api/ 测试程序:RecommenderTest.java 测试数据集:item.csv 1,101,5.0 ...
- 当安装了ubuntu操作系统怎么也调用不出中文输入法时,可以用以下方式尝试解决。
卸载 fcitx sudo apt-get remove fcitx 重启 sudo reboot 重新安装 fcitxsudo apt-get isntall fcitx 安装拼音输入法sudo a ...
- pyspider architecture--官方文档
原文地址:http://docs.pyspider.org/en/latest/Architecture/ Architecture This document describes the reaso ...
- ValueProvider核心的值提供系统
Model绑定的数据具有多种来源: 提交的表单 Json字符串 当前路由数据 请求地址的查询字符串 ASP.NET MVC将这种基于不同数据来源的数据提供机制实现在ValueProvider的组件中 ...
- DIV水平方向居中的几种方法
一.使用margin: 1 #center0 { 2 background: red; 3 margin: 0 auto; 4 } 或者: margin: auto; 这样的前提是父盒子里没有其他盒子 ...
- Sphinx在windows下安装使用[支持中文全文检索]
原文地址:http://www.fuchaoqun.com/2008/11/sphinx-on-windows-xp/ 前 一阵子尝试使用了一下Sphinx,一个能够被各种语言(PHP/Python/ ...
- JS自定义功能函数实现动态添加网址参数修改网址参数值
无论是前端开发还是后台设计,很多时候开发人员都需要获取当前或目标网址的相关信息.这个已有现成的内置对象属性可以直接调用了(下面是获取当前页面的参考代码) 复制代码 代码如下: <script t ...