zoukankan      html  css  js  c++  java
  • 线段树

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

                                        

     

     

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define N 1000010
    using namespace std;
    int n,m,a[N];
    int mx[N*4],mn[N*4];
    void pushup(int k)
    {
        mx[k]=max(mx[k*2],mx[k*2+1]);
        mn[k]=min(mn[k*2],mn[k*2+1]);
    }
    void build(int k,int l,int r)
    {
        if(l==r)
        {
            mx[k]=mn[k]=a[l];
            return;
        }
        int mid=l+r>>1;
        build(k*2,l,mid);
        build(k*2+1,mid+1,r);
        pushup(k);
    }
    int ask_max(int k,int l,int r,int z,int y)
    {
        if(l==z&&r==y) return mx[k];
        int mid=l+r>>1;
        if(y<=mid) return ask_max(k*2,l,mid,z,y);
        if(z>mid) return ask_max(k*2+1,mid+1,r,z,y);
        return max(ask_max(k*2,l,mid,z,mid),
                ask_max(k*2+1,mid+1,r,mid+1,y));
    }
    int ask_min(int k,int l,int r,int z,int y)
    {
        if(l==z&&r==y) return mn[k];
        int mid=l+r>>1;
        if(y<=mid) return ask_min(k*2,l,mid,z,y);
        if(z>mid) return ask_min(k*2+1,mid+1,r,z,y);
        return min(ask_min(k*2,l,mid,z,mid),
                ask_min(k*2+1,mid+1,r,mid+1,y));
    }
    void change(int k,int l,int r,int x)
    {
        if(l==r)
        {
            mx[k]=mn[k]=a[l];
            return;
        }
        int mid=l+r>>1;
        if(x<=mid) change(k*2,l,mid,x);
        else change(k*2+1,mid+1,r,x);
        pushup(k);
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        build(1,1,n);
        while(m--)
        {
            int l,r;
            cin>>l>>r;
            int ans=ask_max(1,1,n,l,r)-ask_min(1,1,n,l,r);
            cout<<ans<<endl;
        }
    }
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define N 1000010
    using namespace std;
    int n,m,a[N];
    int sum[N*4],len[N*4],ad[N*4];
    void pushup(int k)
    {
        sum[k]=sum[k*2]+sum[k*2+1];
        len[k]=len[k*2]+len[k*2+1];
    }
    void A(int k,int x)
    {
        sum[k]+=x*len[k];
        ad[k]+=x;
    }
    void pushdown(int k)
    {
        A(k*2,ad[k]);
        A(k*2+1,ad[k]);
        ad[k]=0;
    }
    void build(int k,int l,int r)
    {
        if(l==r)
        {
            sum[k]=a[l];
            len[k]=1;
            return;
        }
        int mid=l+r>>1;
        build(k*2,l,mid);
        build(k*2+1,mid+1,r);
        pushup(k);
    }
    int ask_sum(int k,int l,int r,int z,int y)
    {
        if(l==z&&r==y) return sum[k];
        if(ad[k]) pushdown(k);
        int mid=l+r>>1;
        if(y<=mid) return ask_sum(k*2,l,mid,z,y);
        if(z>mid) return ask_sum(k*2+1,mid+1,r,z,y);
        return ask_sum(k*2,l,mid,z,mid)+
                ask_sum(k*2+1,mid+1,r,mid+1,y);
    }
    void change(int k,int l,int r,int z,int y,int x)
    {
        if(l==z&&r==y)
        {
            A(k,x);
            return;
        }
        if(ad[k]) pushdown(k);
        int mid=l+r>>1;
        if(y<=mid) change(k*2,l,mid,z,y,x);
        else if(z>mid) change(k*2+1,mid+1,r,z,y,x);
        else
        {
            change(k*2,l,mid,z,mid,x);
            change(k*2+1,mid+1,r,mid+1,y,x);
        }
        pushup(k);
    }
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        build(1,1,n);
        cin>>m;
        while(m--)
        {
            int op,a,b,x;
            cin>>op>>a>>b;
            if(op==1)
            {
                cin>>x;
                change(1,1,n,a,b,x);
            }
            else
            {
                int ans=ask_sum(1,1,n,a,b);
                cout<<ans<<endl;
            }
        }
    }
  • 相关阅读:
    React Native区分安卓/iOS平台
    yarn命令使用
    React 源码剖析系列 - 不可思议的 react diff
    dangerouslySetInnerHTMl
    iOS12下APP进入后台后再返回前台连接断开
    AttributedString-富文本字符串
    Bundle创建与使用
    UIButton-详解
    实战项目-百思不得姐-精华
    iOS 抖音个人主页布局开发(简单)
  • 原文地址:https://www.cnblogs.com/liusu123456/p/12210158.html
Copyright © 2011-2022 走看看