题目大意:

给定n个数,再给q个区间询问,希望在区间s,t中找到一段连续的子序列使其和最大

因为询问上万,节点数50000,明显是用线段树去做,这里很明显的区间更新,唯一写起来有点恶心的是询问

每一个区间的最大都要跟左右区间的左最大右最大有关系

反正时要注意细节了,查询的时候同时要查询其左右连续最大

自己的错误在于左右连续最大的更新出问题,这个希望自己以后要注意

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <set>
#include <map>
using namespace std; const int INF = 0x3fffffff;
#define N 50010
#define MOD 100007
#define ls o<<1
#define rs o<<1|1
#define define_m int m=(l+r)>>1 int ml[N*] , mr[N*] , mx[N*] , sum[N*];
int a[N] , pre[N] , n; void push_up(int o)
{
mx[o] = max(mx[ls] , mx[rs]);
mx[o] = max(mx[o] , ml[rs]+mr[ls]);
ml[o] = max(ml[ls],sum[ls]+ml[rs]) , mr[o] = max(mr[rs],sum[rs]+mr[ls]);
sum[o] = sum[ls]+sum[rs];
} void build(int o , int l , int r)
{
if(l==r){
sum[o]=ml[o]=mr[o]=mx[o]=a[l];
return;
}
define_m;
build(ls , l , m);
build(rs , m+ , r);
push_up(o);
} void query(int o , int l , int r , int s , int t , int &ansl , int &ansr , int &ans)
{
if(l>=s && r<=t){
ans = mx[o];
ansl = ml[o];
ansr = mr[o];
return ;
}
define_m;
if(m>=t) query(ls , l , m , s , t , ansl , ansr , ans);
else if(m<s) query(rs , m+ , r , s , t , ansl , ansr ,ans);
else{
int t1,t2,t3,t4,t5,t6;
query(ls , l , m , s , m , t1 , t2 , t3);
query(rs , m+ , r , m+ , t , t4 , t5 , t6);
ansl = max(t1 , pre[m]-pre[s-]+t4) , ansr = max(t5 , pre[t]-pre[m]+t2);
ans = max(t3 , t6);
ans = max(ans , t2+t4);
}
//cout<<o<<" "<<l<<" "<<r<<" "<<s<<" "<<t<<" "<<ansl<<" "<<ansr<<" "<<ans<<endl;
} int main()
{
#ifndef ONLINE_JUDGE
freopen("a.in" , "r" , stdin);
#endif // ONLINE_JUDGE
while(~scanf("%d" , &n))
{
for(int i= ; i<=n ; i++){
scanf("%d" , a+i);
pre[i] = pre[i-]+a[i];
}
build( , , n);
int m;
scanf("%d" , &m);
for(int i= ; i<m ; i++){
int s , t;
scanf("%d%d" , &s , &t);
int t1,t2,t3;
query(,,n,s,t,t1,t2,t3);
printf("%d\n" , t3);
}
}
return ;
}

SPOJ GSS1 静态区间求解最大子段和的更多相关文章

  1. [题解] SPOJ GSS1 - Can you answer these queries I

    [题解] SPOJ GSS1 - Can you answer these queries I · 题目大意 要求维护一段长度为 \(n\) 的静态序列的区间最大子段和. 有 \(m\) 次询问,每次 ...

  2. Dynamic Rankings || 动态/静态区间第k小(主席树)

    JYF大佬说,一星期要写很多篇博客才会有人看 但是我做题没有那么快啊QwQ Part1 写在前面 区间第K小问题一直是主席树经典题=w=今天的重点是动态区间第K小问题.静态问题要求查询一个区间内的第k ...

  3. 静态区间第k大(归并树)

    POJ 2104为例 思想: 利用归并排序的思想: 建树过程和归并排序类似,每个数列都是子树序列的合并与排序. 查询过程,如果所查询区间完全包含在当前区间中,则直接返回当前区间内小于所求数的元素个数, ...

  4. SPOJ GSS1 - Can you answer these queries I(线段树维护GSS)

    Can you answer these queries I SPOJ - GSS1 You are given a sequence A[1], A[2], -, A[N] . ( |A[i]| ≤ ...

  5. 数据结构2 静态区间第K大/第K小

    给定数组$A[1...N]$, 区间$[L,R]$中第$K$大/小的数的指将$A[L...R]$中的数从大到小/从小到大排序后的第$K$个. "静态"指的是不带修改. 这个问题有多 ...

  6. HDU3473--Minimum Sum(静态区间第k大)

    Minimum Sum Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  7. 主席树初步学习笔记(可持久化数组?静态区间第k大?)

    我接触 OI也快1年了,然而只写了3篇博客...(而且还是从DP跳到了主席树),不知道我这个机房吊车尾什么时候才能摸到大佬们的脚后跟orz... 前言:主席树这个东西,可以说是一种非常畸形的数据结构( ...

  8. poj2104&&poj2761 (主席树&&划分树)主席树静态区间第k大模板

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 43315   Accepted: 14296 Ca ...

  9. 主席树学习笔记(静态区间第k大)

    题目背景 这是个非常经典的主席树入门题——静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入输出 ...

随机推荐

  1. 常见Oracle HINT的用法

    1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_I ...

  2. 最快速的Android开发环境搭建ADT-Bundle及Hello World

    ADT-Bundle for Windows 是由Google Android官方提供的集成式IDE,已经包含了Eclipse,你无需再去下载Eclipse,并且里面已集成了插件,它解决了大部分新手通 ...

  3. web页面状态

    200 :表示请求成功,服务器已处理 201 :表示服务器端请求被创建, 202 :表示服务器端请求已经被接收,但未处理完成 400 :表示错误的请求 404:表示请求的资源未找到. 405:表示没有 ...

  4. runoob

    今天学习bootstrap的时候偶然发现http://www.runoob.com/ 这个网站不错,比w3cschool界面要好看,内容要丰富 比较适合新手学习,而且上面的内容比较丰富,不错.

  5. [LeetCode_1] twoSum

    LeetCode: 1. twoSum 题目描述 Given an array of integers, return indices of the two numbers such that the ...

  6. HDU 4947 GCD Array 容斥原理+树状数组

    GCD Array Time Limit: 11000/5500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  7. CentOS 安装Zookeeper-3.4.6 单节点

    Dubbo 建议使用 Zookeeper 作为服务的注册中心. 注册中心服务器(192.168.3.71)配置,安装 Zookeeper: 1. 修改操作系统的/etc/hosts 文件中添加: #  ...

  8. [转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件

    原文:http://www.crifan.com/csharp_call_explorer_to_open_destinate_folder_and_select_specific_file/ C#中 ...

  9. [问题2014S14] 复旦高等代数II(13级)每周一题(第十四教学周)

    [问题2014S14]  设 \(V\) 为酉空间, 证明: 不存在 \(V\) 上的非零线性变换 \(\varphi\), 使得对 \(V\) 中任一向量 \(v\) 均有 \[(\varphi(v ...

  10. sql_树形查询

    with Subqry(FID,A_TypeName,A_ParentID) as (select FID,A_TypeName,A_ParentID from tb_Appliances where ...