poj3468区间延迟更新模板题
#include<stdio.h>
#include<string.h>
#define N 100000
struct st{
int x,y;
__int64 yanchi,sum;
}a[N*4];
__int64 b[N];
void build(int t,int x,int y) {
a[t].x=x;
a[t].y=y;
a[t].yanchi=0;
if(x==y) {
a[t].sum=b[x];
return ;
}
int temp=t*2;
int mid=(a[t].x+a[t].y)/2;
build(temp,x,mid);
build(temp+1,mid+1,y);
a[t].sum=a[temp].sum+a[temp+1].sum;
return ;
}
void change(int t,int x,int y,int z) {
if(a[t].x==x&&a[t].y==y) {
a[t].yanchi+=z;
return ;
}
a[t].sum+=(y-x+1)*z;
int temp=t*2;
int mid=(a[t].x+a[t].y)/2;
if(y<=mid)
change(temp,x,y,z);
else
if(x>mid)
change(temp+1,x,y,z);
else {
change(temp,x,mid,z);
change(temp+1,mid+1,y,z);
}
return ;
}
__int64 qury(int t,int x,int y) {
if(a[t].x==x&&a[t].y==y)
return a[t].sum+(y-x+1)*a[t].yanchi;
int temp=t<<1;
int mid=(a[t].y+a[t].x)/2;
a[temp+1].yanchi+=a[t].yanchi;
a[temp].yanchi+=a[t].yanchi;
a[t].sum+=a[t].yanchi*(a[t].y-a[t].x+1);
a[t].yanchi=0;
if(y<=mid)
return qury(temp,x,y);
else
if(x>mid)
return qury(temp+1,x,y);
else
return qury(temp,x,mid)+qury(temp+1,mid+1,y);
}
int main() {
int i,j,k,n,m;
char s[100];
while(scanf("%d%d",&n,&m)!=EOF) {
for(i=1;i<=n;i++)
scanf("%I64d",&b[i]);
build(1,1,n);
while(m--) {
scanf("%s",s);
if(s[0]=='Q') {
scanf("%d%d",&i,&j);
printf("%I64d\n",qury(1,i,j));
}
else {
scanf("%d%d%d",&i,&j,&k);
change(1,i,j,k);
}
}
}
return 0;
}
poj3468区间延迟更新模板题的更多相关文章
- hdu 1556 线段树区间延迟更新好题
656mS #include<stdio.h> #include<stdlib.h> #define N 110000 struct node { int x,y,yanchi ...
- FZU Problem 2171 防守阵地 II (线段树区间更新模板题)
http://acm.fzu.edu.cn/problem.php?pid=2171 成段增减,区间求和.add累加更新的次数. #include <iostream> #include ...
- HDU1698:Just a Hook(线段树区域更新模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=1698 Problem Description In the game of DotA, Pudge’s meat ...
- hdu 1698区间延迟更新
#include<stdio.h> #define N 100100 struct node { int x,y,yanchi; }a[N*4];//注意数组范围 void build(i ...
- zoj 1610 Count the Colors(线段树延迟更新)
所谓的懒操作模板题. 学好acm,英语很重要.做题的时候看不明白题目的意思,我还拉着队友一块儿帮忙分析题意.最后确定了是线段树延迟更新果题.我就欣欣然上手敲了出来. 然后是漫长的段错误.... 第一次 ...
- (线段树 区间合并更新)Tunnel Warfare --hdu --1540
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1540 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- POJ - 3264 线段树模板题 询问区间最大最小值
这是线段树的一个模板题,给出一串数字,然后询问区间的最大最小值. 这个其实很好办,只需把线段树的节点给出两个权值,一个是区间的最小值,一个是区间的最大值,初始化为负无穷和正无穷,然后通过不断地输入节点 ...
- hdu1698 Just a Hook 【区间修改】(模板题)
题目链接:https://vjudge.net/contest/182746#problem/E 题目大意: 一段线段由n条小线段组成,每次操作把一个区间的小线段变成金银铜之一(金的价值为3,银为2, ...
- POJ 3468:A Simple Problem with Integers(线段树区间更新模板)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 141093 ...
随机推荐
- 构建微服务开发环境6————利用npm安装前端框架
[内容指引] 安装JQuery组件: 安装BootStrap前端框架; 安装AngularJs前端框架: 安装angular动画模块: 安装angular的ui-router模块. 一.进入下载的目标 ...
- 正则表达式中的?=,?!,?<=,?<!(预查)解释小栗子
之前在学正则表达式的时候学的并不是很透彻 感觉看看元字符(元字符要用 \ 转义),限定符(^开头 $结尾), 前面写个范围[a-z],在后面写个{n,}能匹配就行了 当时的自己 然而昨天我参加了个 ...
- Java多态学习笔记
面向对象三大特性:封装,继承和多态.其中,封装,继承都比较通俗易懂,唯有多态令我甚是头疼.经过仔细研究之后,终于搞懂了一点,特来做一个分享.独乐乐不如众乐乐. 何为多态?多态的本质是:一个程序中同名的 ...
- sql 删除重复数据
DELETE a FROM tbBuilding a WHERE EXISTS (SELECT 1 FROM tbBuilding b WHERE b.Province = a.Province AN ...
- Hibernate-03 关联映射
学习任务 关联映射 inverse属性.cascade属性 单向的多对一.双向的一对多映射 多对多映射 关联关系 类与类之间最普遍的关系就是关联关系. 单向的关联 双向的关联 单向多对一关联 以Emp ...
- 普通用户切换到root用户
普通用户切换到root用户首先按组合键 CTRL+ALT+T 进入终端界面,一般终端界面默认为普通用户权限模式,如何从普通用户进入root用户首先重置root密码输入 sudo passwd root ...
- python+selenium自动化登录dnf11周年活动界面领取奖励登录部分采坑总结[1]
背景: Dnf的周年庆活动之一,游戏在6月22日 06:00~6月23日 06:00之间登陆过游戏后可以于6月25日 16:00~7月04日 06:00领取奖励 目标:连续四天自动运行脚本,自动领取所 ...
- Xcode导入第三方库
Xcode导入第三方库,例如TapkuLibrary iOS开源框架Tapku下载地址:https://github.com/devinross/tapkulibrary.git 1.创建你的工程项目 ...
- 连接远程docker内的mysql(navicat)
拉取mysql镜像 docker pull mysql:5.6 查看mysql镜像 docker images | grep mysql 启动mysql容器 docker run -p 3306:33 ...
- HDU-4791-Alice‘s Print Service
分析: 1.由于价格是递减的,所以可能出现si*pi>sj*pj(j>i).所以要有一个数组来储存当前端点的最小值. 2.然后二分查找当前的si,比较q*p[i]和M[i+1].不过在这之 ...