poj3468(线段树 边覆盖)
#include<cstdio>
int lb,rb,data;
long long sum[5000000],extra[5000000];
void add(int l,int r,int now)
{
if(lb<=l&&rb>=r){
extra[now]+=data;
sum[now]+=data*(r-l+1);
return;
}
int mid=(l+r)/2,nl=2*now,nr=2*now+1;
extra[nl]+=extra[now];
extra[nr]+=extra[now];
sum[nl]+=extra[now]*(mid-l+1);
sum[nr]+=extra[now]*(r-mid);
extra[now]=0;
if(rb<=mid) add(l,mid,nl);
else if(lb>mid) add(mid+1,r,nr);
else {add(l,mid,nl);add(mid+1,r,nr);}
sum[now]=sum[nl]+sum[nr];
}
long long query(int l,int r,int now)
{
if(lb<=l&&rb>=r) return(sum[now]);
int mid=(l+r)/2,nl=2*now,nr=2*now+1;
extra[nl]+=extra[now];
extra[nr]+=extra[now];
sum[nl]+=extra[now]*(mid-l+1);
sum[nr]+=extra[now]*(r-mid);
extra[now]=0;
if(rb<=mid) return(query(l,mid,nl));
else if(lb>mid) return(query(mid+1,r,nr));
else return(query(l,mid,nl)+query(mid+1,r,nr));
}
int main()
{
int i,j,k,n,m;
char c[2];
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&data);
lb=rb=i;
add(1,n,1);
}
for(i=1;i<=m;i++){
scanf("%s",&c);
switch (c[0]){
case 'C':
scanf("%d%d%d",&lb,&rb,&data);
add(1,n,1);
break;
case 'Q':
scanf("%d%d",&lb,&rb);
printf("%lld\n",query(1,n,1));
break;
}
}
return 0;
}
poj3468(线段树 边覆盖)的更多相关文章
- poj3468 线段树的懒惰标记
题目链接:poj3468 题意:给定一段数组,有两种操作,一种是给某段区间加c,另一种是查询一段区间的和 思路:暴力的方法是每次都给这段区间的点加c,查询也遍历一遍区间,复杂度是n*n,肯定过不去,另 ...
- POJ3468 线段树(区间更新,区间求和,延迟标记)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 97196 ...
- poj3468 线段树+lazy标记
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 92921 ...
- POJ3468(线段树 区间修改 lazy-tag)
我的线段树真的没救了......还是多练几道吧....... You have N integers, A1, A2, ... , AN. You need to deal with two kind ...
- POJ3468(线段树区间维护)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 85502 ...
- poj3468(线段树区间更新&区间求和模板)
题目链接: http://poj.org/problem?id=3468 题意: 输入 n, m表初始有 n 个数, 接下来 m 行输入, Q x y 表示询问区间 [x, y]的和: C x y z ...
- POJ-3468(线段树+区间更新+区间查询)
A Simple Problem With Integers POJ-3468 这题是区间更新的模板题,也只是区间更新和区间查询和的简单使用. 代码中需要注意的点我都已经标注出来了,容易搞混的就是up ...
- poj3468线段树标记永久化
#include<map> #include<set> #include<list> #include<cmath> #include<queue ...
- poj3468 A Simple Problem with Integers(线段树区间更新)
https://vjudge.net/problem/POJ-3468 线段树区间更新(lazy数组)模板题 #include<iostream> #include<cstdio&g ...
随机推荐
- Web开发常见的漏洞
SQL注入漏洞 跨站脚本攻击漏洞 登陆后台管理页面 IIS短文件/文件夹漏洞 系统敏感信息泄露
- [牛感悟系列]JAVA(1)理解JAVA垃圾回收
理解JAVA垃圾回收的好处是什么?满足求知欲是一方面,编写更好的JAVA应用是另外一方面. 如果一个人对垃圾回收过程感兴趣,那表明他在应用程序开发领域有相当程度的经验.如果一个人在思考如何选择正确的垃 ...
- java 中的匿名内部类
转自http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能 ...
- u3d 2d序列动画代码
using UnityEngine; using System.Collections; public class AniSprite : MonoBehaviour { private float ...
- 动态LINQ构建(实现等于不等于大于小于,like以及IN)
首先感谢园子里的“红烧狮子头”,他的工作是本文的基础,引文如下http://www.cnblogs.com/daviddai/archive/2013/03/09/2952087.html,本版本实现 ...
- RichTextBox控件-主要用于输入输出编辑文本信息
1.在RichTextBox控件中添加超链接文字 private void btn_Add_Click(object sender, EventArgs e) { rtbox_HyperLink.Ap ...
- oracle闪回表详解
--- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间 ...
- Session_set_save_handler 之 文本模式实现
1.构建session抽象类,实现Session_set_save_hanlder函数必须的基础函数 <?php /* 实现session利用文件形式或者数据库等其它形式进行存储操作 * aut ...
- SQL重复记录查询(转载)
1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people ) 例二: select * from testtable where ...
- 【POJ2104】kth num
You are working for Macrohard company in data structures department. After failing your previous tas ...