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 ...
随机推荐
- TCO 2015 2D
250分题:给一段仅仅有'0','1'构成的字符串,然后给出串上平衡点的定义:在串上找到某个点(位置是p),这个点将串分成左右两部分(能够为空),左右分别计算字符的值的和,假设左边有字符是'1',那么 ...
- 杂项-公司:Altera
ylbtech-杂项-公司:Altera 自二十年前发明世界上第一个可编程逻辑器件开始,Altera公司(阿尔特拉)(NASDAQ:ALTR)秉承了创新的传统,是世界上“可编程芯片系统”(SOPC)解 ...
- 剑指offer——01二维数组中的查找(Python3)
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- 在Maven中引入spring的DAO、DOMAIN、CONTROLLER、VIEW
除了mysql外麻雀虽小,五脏俱全. 参照之前的博客建立好的maven项目如图. 第一步 : 向maven项目中的pom文件添加依赖 ,然后maven install
- ubuntu DNS 出错,用以下命令可以解决
具体的错误为:DNS_PROBE_FINISHED_BAD_CONFIG 命令为: sudo rm /etc/resolv.conf sudo ln -s ../run/resolvconf/reso ...
- pyspider architecture--官方文档
原文地址:http://docs.pyspider.org/en/latest/Architecture/ Architecture This document describes the reaso ...
- Request.QueryString["id"] 、Request.Params["id"] 的强大
<form> <input type="text" name="id" value="值"> </form&g ...
- [ RESTful ] [ API ] 有用的資訊
1. 淺談 REST 軟體架構風格 (Part.I) - 從了解 REST 到設計 RESTful https://blog.toright.com/posts/725/representationa ...
- UVa 11729 Commando War 【贪心】
题意:有n个部下,交待每个部下完成他相应的任务需要bi的时间,然后完成这项任务需要ji的时间, 选择交待任务的顺序,使得总的花费的时间最少 因为不管怎么样,交待所需要的n*bi的时间都是要花费的, 然 ...
- Dynamic dispatch mechanisms
Normally, in a typed language, the dispatch mechanism will be performed based on the type of the arg ...