题意

秋实大哥是一个儒雅之人,昼听笙歌夜醉眠,若非月下即花前。

所以秋实大哥精心照料了很多花朵。现在所有的花朵排成了一行,每朵花有一个愉悦值。

秋实大哥每天要对着某一段连续的花朵歌唱,然后这些花朵的愉悦值都会增加一个相同的值v(v可能为负)。

同时他想知道每次他唱完歌后这一段连续的花朵的愉悦值总和是多少。


思路

模板题。

AC代码

#include <cstdio>
#include <cmath>
#include <cctype>
#include <bitset>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
#define eps 1e-10
#define inf 0x3f3f3f3f
#define pii pair<int, int>
typedef long long LL;
const double PI = acos(-1.0);
const int maxn = 1e5 + 5;
int a[maxn];

struct node{
    int l, r;
    LL sum, lazy;
    void update(int x) {
        sum += 1LL*(r-l+1)*x;
        lazy += x;
    }
}tree[maxn*4];

void push_up(int x) {
    tree[x].sum = tree[x<<1].sum + tree[x<<1|1].sum;
}

void push_down(int x) {
    int lazy = tree[x].lazy;
    if(lazy) {
        tree[x<<1].update(lazy);
        tree[x<<1|1].update(lazy);
        tree[x].lazy = 0;
    }
}

void build(int x, int l, int r) {
    tree[x].l = l, tree[x].r = r;
    tree[x].sum = tree[x].lazy = 0;
    if(l == r) {
        tree[x].sum = a[l];
    }
    else {
        int mid = (l+r) / 2;
        build(x<<1, l, mid);
        build(x<<1|1, mid+1, r);
        push_up(x);
    }
}

void update(int x, int l, int r, int val) {
    int L = tree[x].l, R = tree[x].r;
    if(l <= L && R <= r) {
        tree[x].update(val);
    }
    else {
        push_down(x);
        int mid = (L+R) / 2;
        if(mid >= l) update(x<<1, l, r, val);
        if(r > mid) update(x<<1|1, l, r, val);
        push_up(x);
    }
}

LL query(int x, int l, int r) {
    int L = tree[x].l, R = tree[x].r;
    if(l <= L && R <= r) return tree[x].sum;
    else {
        push_down(x);
        int mid = (L+R) / 2;
        LL ans = 0;
        if(mid >= l) ans += query(x<<1, l, r);
        if(r > mid) ans += query(x<<1|1, l, r);
        push_up(x);
        return ans;
    }
}

int main() {
    int n, q;
    while(scanf("%d", &n) == 1) {
        for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
        build(1, 1, n);
        scanf("%d", &q);
        int l, r, val;
        for(int i = 0; i < q; ++i) {
            scanf("%d%d%d", &l, &r, &val);
            update(1, l, r, val);
            printf("%lld\n", query(1, l, r));
        }
    }
    return 0;
}

如有不当之处欢迎指出!

UESTC - 1057 秋实大哥与花 线段树的更多相关文章

  1. UESTC - 1057 秋实大哥与花 线段树模板题

    http://acm.uestc.edu.cn/#/problem/show/1057 题意:给你n个数,q次操作,每次在l,r上加上x并输出此区间的sum 题解:线段树模板, #define _CR ...

  2. CDOJ 1057 秋实大哥与花 线段树 区间更新+区间查询

    链接: I - 秋实大哥与花 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Submit ...

  3. 2015 UESTC 数据结构专题B题 秋实大哥与花 线段树 区间加,区间查询和

    B - 秋实大哥与花 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 De ...

  4. UESTC-1057 秋实大哥与花(线段树+成段加减+区间求和)

    秋实大哥与花 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit St ...

  5. UESTC 1061 秋实大哥与战争 线段树区间合并

    秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 男儿何不带吴钩, ...

  6. 2015 UESTC 数据结构专题E题 秋实大哥与家 线段树扫描线求矩形面积交

    E - 秋实大哥与家 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 De ...

  7. 2015 UESTC 数据结构专题A题 秋实大哥与小朋友 线段树 区间更新,单点查询,离散化

    秋实大哥与小朋友 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Desc ...

  8. UESTC_秋实大哥与花 2015 UESTC Training for Data Structures<Problem B>

    B - 秋实大哥与花 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  9. uestc 1073 秋实大哥与线段树 Label:线段树

    秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) “学习本无底, ...

随机推荐

  1. js_9_dom属性

    如何设置标签属性? 找到标签 设置属性: 默认:.属性 = 属性值  //  默认属性才能用 找style中font-size : .style.fontSize     //  中间的短杆去掉,s要 ...

  2. Activity的setContentView的流程

    最简单的Activity中的内容大致是这样的: public class MainActivity extends Activity { @Override public void onCreate( ...

  3. SSH反向连接及Autossh

    参考文章 http://www.freeoa.net/osuport/netmanage/autossh-useage-refer_2831.html 接触Linux恐怕对SSH再熟悉不过了,还有sc ...

  4. TCP/IP详解 卷1 第二十一章 TCP的超时与重传

    21.1 引言 可靠性的保证之一就是超时重传 前面两个超时重传的例子 1)  ICMP端口不能到达时,TFTP客户使用UDP实现了一个简单的超时和重传机制,假定5s是一个适当是时间间隔,并每隔5s进行 ...

  5. MySQL笔记-union

    union语法 select ... union [all | distinct] selct ... union用于把来自多个select语句的结果组合在一个结果集中. 两次查询的列表必须相同,否则 ...

  6. SpringMVC源码情操陶冶-HandlerAdapter适配器简析

    springmvc中对业务的具体处理是通过HandlerAdapter适配器操作的 HandlerAdapter接口方法 列表如下 /** * Given a handler instance, re ...

  7. Java程序占用的内存可能会大于Xmx

    很多人认为Xmx和-Xms参数指定的就是Java程序将会占用的内存,但是这实际上只是Java堆对象将会占用的内存.堆只是影响Java程序占用内存数量的一个因素. 除了堆,影响Java程序所占用内存的因 ...

  8. HDU2089 不要62 BZOJ1026: [SCOI2009]windy数 [数位DP]

    基础题复习 这次用了dfs写法,感觉比较好 #include <iostream> #include <cstdio> #include <cstring> #in ...

  9. BZOJ 1488: [HNOI2009]图的同构 [Polya]

    完全图中选出不同构的简单图有多少个 上题简化版,只有两种颜色....直接copy就行了 太诡异了,刚才电脑上多了一个不动的鼠标指针,然后打开显卡管理界面就没了 #include<iostream ...

  10. Git团队协作之GitFlow & SoucceTree

    GitFlow 定义了一个围绕项目发布的严格的分支模型,仍然使用中央仓库作为开发者的交互中心 GitFlow分支 Master分支 Hotfix紧急修改 Release分支 Develop开发分支 F ...