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 ...
随机推荐
- NoSQL性能测试:MongoDB VS SequoiaDB
作 为NoSQL的一个重要类型,文档型NoSQL通常被认为是最接近传统关系型数据库的NoSQL.文档型NoSQL的核心是数据嵌套,这种设计可以从某种 程度上大大简化传统数据库复杂的关联问题.同时由于摆 ...
- php curl抓取远程页面内容的代码
使用php curl抓取远程页面内容的例子. 代码如下: <?php /** * php curl抓取远程网页内容 * edit by www.jbxue.com */ $curlPost = ...
- The architecture of LTE network.
3GPP定义的LTE网络架构结构变得扁平化,无线RNC/BSC 消失,只有eNodeB.控制面使用MME进行处理,用户面使用SGW和PGW进行处理.相比GSM和UMTS,在逻辑接口上定义了S1/X2逻 ...
- OPM与ILE编程模式的区别
OPM与ILE编程模式的区别 OPM是传统编程模式,即一个可执行的程序只用一种语言编程:一个可执行程序只有一段程序代码组成:程序之间的调用关系是动态的调用关系. ILE是多语言开发集成编程模式,即一个 ...
- wpf 绑定ObservableCollection 的Count属性
相信大家都遇到过这样的需求,DataGrid里显示符合筛选条件的学生列表,上方TextBolck里显示学生总数,大家可以这样做: 1,XAML代码 <Window x:Class="O ...
- Wpf 简单制作自己的窗体样式
最近一直在搞wpf相关的东东,由于还在门外徘徊,所以第一篇blog写了简单的制作扁平化的wpf button样式,这一篇也简单的制作属于自己wpf 窗体的样式. 废话少说,下面就开始制作自己的窗体样式 ...
- Oracle全表扫描
优化器在形成执行计划时需要做的一个重要选择——如何从数据库查询出需要的数据.对于SQL语句存取的任何表中的任何行,可能存在许多存取路径(存取方法),通过它们可以定位和查询出需要的数据.优化器选择其中自 ...
- PHP 对数组数值进行排序,使用另一个容器
<?php /* 排序方式::事实上只需要将要循环的数组进行N次循环,然后每次取最大的一个值*/ $array = array(100,25,10,258,33,48,10,5,13,58,33 ...
- IOS 学习教程
IOS 学习教程http://www.gaixue.com/course/236#### 讲课http://wenku.baidu.com/view/6786064fe518964bcf847c63. ...
- UILabel设置行间距和字间距并计算高度-b
#define UILABEL_LINE_SPACE 6 #define HEIGHT [ [ UIScreen mainScreen ] bounds ].size.height //给UILabe ...