zoukankan      html  css  js  c++  java
  • 在一段里同时增加某个数 然后在给定的区间里求和

    #include<algorithm>
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<math.h>
    using namespace std;
    #define N 110000
    #define lson rood<<1
    #define rson rood<<1|1
    int w[N];
    struct node
    {
        int l,r,mid,len;
        long long v,e;
    }a[N<<2];
    void q(int rood,int l,int r)
    {
        a[rood].l=l;a[rood].r=r;a[rood].mid=(r+l)/2;
        a[rood].e=0;a[rood].len=(r-l+1);
        if(l==r)
        {
            a[rood].v=w[l];
            return ;
        }
        q(lson,l,a[rood].mid);
        q(rson,a[rood].mid+1,r);
        a[rood].v=a[lson].v+a[rson].v;
    }
    void qq(int rood,int l,int r,int g)
    {
        a[rood].v+=(r-l+1)*g;
        if(a[rood].l==l&&a[rood].r==r)
        {
            a[rood].e+=g;
            return ;
        }
        if(a[rood].mid>=r) qq(lson,l,r,g);
        else if(a[rood].mid<l) qq(rson,l,r,g);
        else
        {
            qq(lson,l,a[rood].mid,g);
            qq(rson,a[rood].mid+1,r,g);
        }
    }
    void Q(int rood)
    {
        a[lson].v+=a[lson].len*a[rood].e;
        a[rson].v+=a[rson].len*a[rood].e;
        a[lson].e+=a[rood].e;
        a[rson].e+=a[rood].e;
        a[rood].e=0;
    }
    long long qqq(int rood,int l,int r)
    {
        if(a[rood].l==l&&a[rood].r==r)
            return a[rood].v;
        Q(rood);
        if(a[rood].mid>=r) return qqq(lson,l,r);
        else if(a[rood].mid<l) return qqq(rson,l,r);
        else
        {
            long long x=qqq(lson,l,a[rood].mid);
            long long  y=qqq(rson,a[rood].mid+1,r);
            return x+y;
        }
    }
    int main()
    {
        int n,m,e,f,g;
        char str[12];
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(int i=1;i<=n;i++)
                scanf("%d",&w[i]);
            q(1,1,n);
            while(m--)
            {
                scanf("%s%d%d",str,&e,&f);
                if(str[0]=='Q')
                {
                    printf("%lld
    ",qqq(1,e,f));
                    continue;
                }
                scanf("%d",&g);
                qq(1,e,f,g);
            }
        }
        return 0;
    }

    http://poj.org/problem?id=3468

  • 相关阅读:
    VUE注意
    https://www.ituring.com.cn/article/211352虚拟DOM
    web.xml中关于Servlet、Filter、Listener的配置
    Eclipse中web项目部署至Tomcat步骤
    BAE百度云平台的mysql数据库的施用(Java)
    MySQL存储过程
    python列表插入--append(), extend(), insert()
    range()函数
    c++拷贝构造函数引用传参
    我居然要写这周的周报???
  • 原文地址:https://www.cnblogs.com/a719525932/p/5667222.html
Copyright © 2011-2022 走看看