解题报告:SP1043 GSS1

Posted tlx-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解题报告:SP1043 GSS1相关的知识,希望对你有一定的参考价值。

题目链接:SP1043 GSS1 - Can you answer these queries I
对,(GSS)毒瘤数据结构题,就是我在这篇文章中提到的紫题。
相对其他(GSS)题简单些,但并不简单
板子题嘛,上代码就好了,线段树烦死了

(Code):

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int MAXN=1000005;
int t[MAXN],n,m,x,y;
struct seg_t
{
    long long l,r,sum,pre,suf,maxn;
    seg_t()
    {
        l=r=sum=pre=suf=maxn=0;
    }
}a[MAXN<<2];
void update(long long k)
{
    a[k].pre=max(a[k<<1].pre,a[k<<1].sum+a[k<<1|1].pre);
    a[k].suf=max(a[k<<1|1].suf,a[k<<1|1].sum+a[k<<1].suf);
    a[k].maxn=max(max(a[k<<1].maxn,a[k<<1|1].maxn),a[k<<1].suf+a[k<<1|1].pre);
    a[k].sum=a[k<<1].sum+a[k<<1|1].sum;
}
void build(long long k,long long l,long long r)
{
    a[k].l=l,a[k].r=r;
    if(l==r)
    {
        a[k].maxn=a[k].sum=a[k].suf=a[k].pre=t[l];
        return;
    }
    long long mid=(l+r)>>1;
    build(k<<1,l,mid),build(k<<1|1,mid+1,r); 
    update(k);
}
seg_t query(long long k,long long l,long long r)
{
    long long mid=(a[k].l+a[k].r)>>1;
    if(a[k].l>=l&&a[k].r<=r) return a[k];
    if(r<=mid) return query(k<<1,l,r);
    else if(l>=mid+1) return query(k<<1|1,l,r);
    else
    {
        seg_t ll,rr,ans;
        ll=query(k<<1,l,mid),rr=query(k<<1|1,mid+1,r);
        ans.sum=ll.sum+rr.sum;
        ans.maxn=max(ll.maxn,rr.maxn);
        ans.pre=max(ll.pre,ll.sum+rr.pre);
        ans.suf=max(rr.suf,rr.sum+ll.suf);
        ans.maxn=max(ans.maxn,ll.suf+rr.pre);
        return ans;
    }
}
int main()
{
    scanf("%lld",&n);
    for(int i=1;i<=n;i++) scanf("%lld",&t[i]);
    build(1,1,n);
    scanf("%lld",&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%lld%lld",&x,&y);
        printf("%lld
",query(1,x,y).maxn);
    }
    return 0;
}

以上是关于解题报告:SP1043 GSS1的主要内容,如果未能解决你的问题,请参考以下文章

[SP1043] GSS1 - Can you answer these queries I

$SP1043$ $GSS1$ $-$ $Can$ $you$ $answer$ $these$ $queries$ $I$

SP1043 GSS1 - Can you answer these queries I 线段树

luogu SP1043 GSS1 - Can you answer these queries I

luogu SP1043 GSS1 - Can you answer these queries I

SP1043GSS1 - Can you answer these queries I