zoukankan      html  css  js  c++  java
  • GSS1

    Code

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define lson l,mid,rt<<1
    #define rson mid+1,r,rt<<1|1
    using namespace std;
    const int N = 50100;
    typedef long long ll;
    ll sum[N << 2],pre_sum[N << 2],suf_sum[N << 2],sub_sum[N << 2],n,m;
    inline ll read()
    {
    	ll res = 0,flag = 1;
    	char ch = getchar();
    	while(ch < '0' || ch > '9')
    	{
    		if(ch == '-') flag = -1;
    		ch = getchar();
    	} 
    	while(ch <= '9' && ch >= '0')
    	{
    		res = res*10 + ch - '0';
    		ch = getchar();
    	}
    	return res*flag;
    }
    void update(int rt)
    {
    	sum[rt] = sum[rt<<1] + sum[rt<<1|1];
    	pre_sum[rt] = max(pre_sum[rt<<1],sum[rt<<1] + pre_sum[rt<<1|1]);
    	suf_sum[rt] = max(suf_sum[rt<<1|1],suf_sum[rt<<1] + sum[rt<<1|1]);
    	sub_sum[rt] = max(suf_sum[rt<<1] + pre_sum[rt<<1|1],max(sub_sum[rt<<1],sub_sum[rt<<1|1]));
    }
    void build(int l,int r,int rt)
    {
    	if(l == r)
    	{
    		pre_sum[rt] = suf_sum[rt] = sub_sum[rt] = sum[rt] = read();
    		return;
    	}
    	int mid = (l+r)>>1;
    	build(lson);
    	build(rson);
    	update(rt);
    }
    ll query_pre(int l,int r,int rt,int ql,int qr)
    {
    	if(ql <= l && r <= qr) return pre_sum[rt];
    	int mid = (l+r)>>1;
    	if(qr <= mid) return query_pre(lson,ql,qr);
    	return max(query_pre(lson,ql,qr),sum[rt<<1] + query_pre(rson,ql,qr));
    }
    ll query_suf(int l,int r,int rt,int ql,int qr)
    {
    	if(ql <= l && r <= qr) return suf_sum[rt];
    	ll mid = (l+r)>>1;
    	if(mid < ql) return query_suf(rson,ql,qr);
    	return max(query_suf(rson,ql,qr),sum[rt<<1|1] + query_suf(lson,ql,qr));
    }
    ll query_sub(int l,int r,int rt,int ql,int qr)
    {
    	if(ql <= l && r <= qr) return sub_sum[rt];
    	ll res = -9999999;
    	ll mid = (l+r)>>1;
    	if(ql <= mid) res = max(res,query_sub(lson,ql,qr));//
    	if(mid < qr) res = max(res,query_sub(rson,ql,qr));//
    	if(ql <= mid && mid < qr) res = max(res,query_suf(lson,ql,qr) + query_pre(rson,ql,qr));
    	return res;
    }
    int main()
    {
    	n = read();
    	build(1,n,1);
    	m = read();
    	for(int i = 1;i <= m;++i)
    	{
    		ll l,r;
    		l = read();
    		r = read();
    		printf("%lld
    ",query_sub(1,n,1,l,r));
    	}
    	return 0;
    }
    
    
    岂能尽如人意,但求无愧我心
  • 相关阅读:
    【阿里的感悟】质量该如何做? .(转载)
    java linux 配置环境
    Spring Bean属性绑定Bean返回值
    Spring BeanNameAutoProxyCreator 与 ProxyFactoryBean
    Spring Aop之(二)Aop 切面声明和通知
    Ubuntu开机自动启动Script
    转战博客园!
    linux 系统管理11 ——系统安全及应用
    linux awk
    Rsync数据同步工具
  • 原文地址:https://www.cnblogs.com/Zforw/p/11373950.html
Copyright © 2011-2022 走看看