Can you answer these queries(spoj 1043)
题意:多次查询区间最长连续字段和
/*
用线段树维护区间最长子段和,最长左子段和,最长右子段和。
*/
#include<cstdio>
#include<iostream>
#define N 50010
using namespace std;
int a[N],s[N],sum[N*],lsum[N*],rsum[N*],n,m;
void push_up(int k,int l,int r){
int mid=l+r>>;
lsum[k]=max(lsum[k*],s[mid]-s[l-]+lsum[k*+]);
rsum[k]=max(rsum[k*+],rsum[k*]+s[r]-s[mid]);
sum[k]=max(max(sum[k*],sum[k*+]),rsum[k*]+lsum[k*+]);
sum[k]=max(max(sum[k*],sum[k*+]),rsum[k*]+lsum[k*+]);
}
void build(int l,int r,int k){
int mid=l+r>>;
if(l==r){
sum[k]=lsum[k]=rsum[k]=a[l];
return;
}
build(l,mid,k*);
build(mid+,r,k*+);
push_up(k,l,r);
}
int query_l(int l,int r,int k,int x,int y){//询问最长左子段和
if(l==x&&r==y)return lsum[k];
int mid=l+r>>;
if(y<=mid) return query_l(l,mid,k*,x,y);
else {
return max(lsum[k*],s[mid]-s[l-]+query_l(mid+,r,k*+,mid+,y));
}
}
int query_r(int l,int r,int k,int x,int y){//询问最长右子段和
if(l==x&&r==y)return rsum[k];
int mid=l+r>>;
if(x>mid) return query_r(mid+,r,k*+,x,y);
else {
return max(rsum[k*+],s[r]-s[mid]+query_r(l,mid,k*,x,mid));
}
}
int query(int l,int r,int k,int x,int y){
if(l==x&&r==y) return sum[k];
int mid=l+r>>;
if(y<=mid)return query(l,mid,k*,x,y);
else if(x>mid) return query(mid+,r,k*+,x,y);
else {
int ls=query_r(l,mid,k*,x,mid);
int rs=query_l(mid+,r,k*+,mid+,y);
return max(max(query(l,mid,k*,x,mid),query(mid+,r,k*+,mid+,y)),ls+rs);
}
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]),s[i]=s[i-]+a[i];
build(,n,);
scanf("%d",&m);
for(int i=;i<=m;i++){
int x,y;scanf("%d%d",&x,&y);
printf("%d\n",query(,n,,x,y));
}
return ;
}
Can you answer these queries(spoj 1043)的更多相关文章
- kuangbin专题七 HDU4027 Can you answer these queries? (线段树)
		A lot of battleships of evil are arranged in a line before the battle. Our commander decides to use ... 
- H - Can you answer these queries? - (区间查询更新)
		有一列数,(都是2^63范围内的并且都大于0的整数),现在呢有一些操作, 操作 0 可以把区间LR内的所有数都变成它的平方根数(是取整后的),操作 1 可以就是求区间LR内的和了. 分析:因为这个操作 ... 
- HDU - 4027 Can you answer these queries?(线段树)
		给定一个长度为n的序列,m次操作. 每次操作 可以将一个区间内的所有数字变为它的根号. 可以查询一个区间内所有元素的和. 线段树的初级应用. 如果把一个区间内的元素都改为它的根号的话,是需要每个数字都 ... 
- HDU 4027 Can you answer these queries?(线段树区间开方)
		Can you answer these queries? Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65768/65768 K ... 
- 【Codeforces710F】String Set Queries     (强制在线)AC自动机 + 二进制分组
		F. String Set Queries time limit per test:3 seconds memory limit per test:768 megabytes input:standa ... 
- Spring-2-B Save the Students(SPOJ AMR11B)解题报告及测试数据
		Save the Students Time Limit:134MS Memory Limit:0KB 64bit IO Format:%lld & %llu Descri ... 
- Can you answer these queries I SPOJ - GSS1  (线段树维护区间连续最大值/最大连续子段和)
		You are given a sequence A[1], A[2], ..., A[N] . ( |A[i]| ≤ 15007 , 1 ≤ N ≤ 50000 ). A query is defi ... 
- Can you answer these queries V SPOJ - GSS5 (分类讨论+线段树维护区间最大子段和)
		recursion有一个整数序列a[n].现在recursion有m次询问,每次她想知道Max { A[i]+A[i+1]+...+A[j] ; x1 <= i <= y1 , x2 &l ... 
- HDU 4027 Can you answer these queries?(线段树的单点更新+区间查询)
		题目链接 题意 : 给你N个数,进行M次操作,0操作是将区间内的每一个数变成自己的平方根(整数),1操作是求区间和. 思路 :单点更新,区间查询,就是要注意在更新的时候要优化,要不然会超时,因为所有的 ... 
随机推荐
- C#实现为类和函数代码自动添加版权注释信息的方法
			这篇文章主要介绍了C#实现为类和函数代码自动添加版权注释信息的方法,主要涉及安装文件的修改及函数注释模板的修改,需要的朋友可以参考下 本文实例讲述了C#实现为类和函数代码自动添加版权注释信息的方法 ... 
- ES-Apache Lucene
			前言 在介绍Lucene之前,我们来了解相关的历史. 有必要了解的Apache Apache软件基金会(也就是Apache Software Foundation,简称为ASF)是专门为运作一个开源软 ... 
- 自定义 TypeHandler
			自定义TypeHandler分为三个步骤: 1.编写自定义TypeHandler,并继承自抽象类BaseTypeHandler<T>,实现抽象方法 2.在mybatis-config.xm ... 
- 做OJ项目时遇到的坑
			1.js代码写在Dom加载前,导致highcharts在ie8能够显示,而ie高版本和其他浏览器不能显示 我的理解:由于IE8和其他浏览器的js解析机制不同,ie8是在等dom全部加载完才开始执行js ... 
- 移动端超级好用的reset.css(只做参考哦具体以你们实际项目需求为准)
			html { color: #333; /*规定主色调,依据业务场景(非必须)*/ background: #F6F6F6; /*规定主背景,依据业务场景(非必须)*/ overflow-y: aut ... 
- 洛谷 P1006 传纸条
			题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ... 
- 洛谷 P1413 坚果保龄球
			题目描述 PVZ这款游戏中,有一种坚果保龄球.zombie从地图右侧不断出现,向左走,玩家需要从左侧滚动坚果来碾死他们. 我们可以认为地图是一个行数为6,列数为60的棋盘.zombie出现的那一秒站在 ... 
- mac homebrew安装
			http://book.51cto.com/art/201107/278761.htm 3.2.3 使用 Homebrew 安装 Git Mac OS X 有好几个包管理器,用于管理一些开源软件在 M ... 
- 升级或者重装Discuz! 版本后 QQ互联英文乱码显示的正确解决方法
			升级Discuz! X3版本QQ互联英文乱码!connect_viewthread_share_to_qq! 目前Discuz!论坛上 最简单的解决方法: 第一步:后台----->站长---- ... 
- day24-2 单例模式
			目录 单例模式 类内部定义静态方法实现单例模式 装饰器实现单例模式 元类实现单例模式 单例模式 单例模式:基于某种方法实例化多次得到实例是同一个 当实例化多次得到的对象中存放的属性都一样的情况,应该将 ... 
