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;
    }
    
    
    岂能尽如人意,但求无愧我心
  • 相关阅读:
    AdvComboBox
    带有可选选项的输入文本框(组合框)
    使用JavaScript为整个网站创建通用的Twitter按钮
    高速绘图控件
    Outlook样式分组列表控件
    CComboBox的禁用项目
    一个自定义的WPF滑块按钮
    23个设计模式
    MVC执行流程
    SQL注入面试
  • 原文地址:https://www.cnblogs.com/Zforw/p/11373950.html
Copyright © 2011-2022 走看看