zoukankan      html  css  js  c++  java
  • SPOJ GSS1 Can you answer these queries I ——线段树

    【题目分析】

        线段树裸题。

        注意update的操作,写结构体里好方便。

        嗯,没了。

    【代码】

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <cstdlib>
    
    #include <map>
    #include <set>
    #include <queue>
    #include <string>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    #define maxn 500005
    #define eps 1e-8
    #define db double
    #define ll long long
    #define inf 0x3f3f3f3f
    #define F(i,j,k) for (int i=j;i<=k;++i)
    #define D(i,j,k) for (int i=j;i>=k;--i)
    
    void Finout()
    {
        #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    //    freopen("out.txt","w",stdout);
        #endif
    }
    
    int Getint()
    {
        int x=0,f=1; char ch=getchar();
        while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
        while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
        return x*f;
    }
    
    struct Node{
    	int lx,rx,mx,sum;
    	Node operator + (Node x)
    	{
    		Node ret;
    		ret.lx=max(lx,sum+x.lx);
    		ret.rx=max(x.sum+rx,x.rx);
    		ret.sum=sum+x.sum;
    		ret.mx=max(max(mx,x.mx),max(rx+x.lx,max(ret.lx,ret.rx)));
    		return ret;
    	}
    }t[maxn];
    
    int n,a[maxn],q,L,R;
    
    void Build(int o,int l,int r)
    {
    //	printf("Build %d %d
    ",l,r);
    	if (l==r)
    	{
    		t[o].lx=t[o].rx=t[o].mx=t[o].sum=a[l];
    		return ;
    	}
    	int mid=l+r>>1;
    	Build(o<<1,l,mid);
    	Build(o<<1|1,mid+1,r);
    	t[o]=t[o<<1]+t[o<<1|1];
    }
    
    Node Query(int o,int l,int r)
    {
    //	printf("Query %d %d
    ",l,r); 
    	if (L<=l&&r<=R) return t[o];
    	int mid=l+r>>1;
    	if (L>mid) return Query(o<<1|1,mid+1,r);
    	else if (R<=mid) return Query(o<<1,l,mid);
    	else return Query(o<<1,l,mid)+Query(o<<1|1,mid+1,r);
    }
    
    int main()
    {
    	Finout();
    	n=Getint(); F(i,1,n) a[i]=Getint();
    	Build(1,1,n);
    	q=Getint();
    	F(i,1,q)
    	{
    		L=Getint(); R=Getint();
    		printf("%d
    ",Query(1,1,n).mx);
    	}
    }
    
  • 相关阅读:
    SSDT
    SSDT
    Rootkit之SSDT hook(通过CR0)
    直接用编译器按ctrl+F5运行和双击运行结果不一样
    HDU 1754 I Hate It
    HDU 1166 敌兵布阵
    网易2017内推笔试题 合唱团
    CodeForces 1151F Sonya and Informatics
    CodeForces 1151E Number of Components
    洛谷 P1962 斐波那契数列
  • 原文地址:https://www.cnblogs.com/SfailSth/p/6360281.html
Copyright © 2011-2022 走看看