题目传送门

 /*
线段树-成段更新:裸题,成段增减,区间求和
注意:开long long:)
*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
#define LL long long const int MAXN = 1e5 + ;
const int INF = 0x3f3f3f3f;
struct Node
{
LL sum, add;
}node[MAXN << ]; void push_up(int rt)
{
node[rt].sum = node[rt<<].sum + node[rt<<|].sum;
} void push_down(int rt, int c)
{
if (node[rt].add)
{
node[rt<<].add += node[rt].add;
node[rt<<|].add += node[rt].add;
node[rt<<].sum += node[rt].add * (c - (c >> ));
node[rt<<|].sum += node[rt].add * (c >> );
node[rt].add = ;
}
} void build(int l, int r, int rt)
{
node[rt].add = ;
if (l == r) {scanf ("%I64d", &node[rt].sum); return ;}
int mid = (l + r) >> ;
build (lson); build (rson); push_up (rt);
} void updata(int ql, int qr, int c, int l, int r, int rt)
{
if (ql <= l && r <= qr) {node[rt].sum += (LL) c * (r - l + ); node[rt].add += c; return ;} push_down (rt, r - l + ); int mid = (l + r) >> ;
if (ql <= mid) updata (ql, qr, c, lson);
if (qr > mid) updata (ql, qr, c, rson); push_up (rt);
} LL query(int ql, int qr, int l, int r, int rt)
{
if (ql <= l && r <= qr) return node[rt].sum; push_down (rt, r - l + ); int mid = (l + r) >> ; LL ans = ;
if (ql <= mid) ans += query (ql, qr, lson);
if (qr > mid) ans += query (ql, qr, rson); return ans;
} int main(void) //POJ 3468 A Simple Problem with Integers
{
//freopen ("POJ_3468.in", "r", stdin); int n, q;
while (scanf ("%d%d", &n, &q) == )
{
build (, n, );
while (q--)
{
char s[]; int ql, qr, c;
scanf ("%s", &s);
if (s[] == 'Q')
{
scanf ("%d%d", &ql, &qr);
printf ("%I64d\n", query (ql, qr, , n, ));
}
else
{
scanf ("%d%d%d", &ql, &qr, &c);
updata (ql, qr, c, , n, );
}
}
} return ;
}

线段树(成段更新) POJ 3468 A Simple Problem with Integers的更多相关文章

  1. poj 3468 A Simple Problem with Integers 【线段树-成段更新】

    题目:id=3468" target="_blank">poj 3468 A Simple Problem with Integers 题意:给出n个数.两种操作 ...

  2. POJ 2777 Count Color (线段树成段更新+二进制思维)

    题目链接:http://poj.org/problem?id=2777 题意是有L个单位长的画板,T种颜色,O个操作.画板初始化为颜色1.操作C讲l到r单位之间的颜色变为c,操作P查询l到r单位之间的 ...

  3. poj 3648 线段树成段更新

    线段树成段更新需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候.延迟标记的意思是:这个区间的左右儿子都需要被更新,但是当 ...

  4. ACM: Copying Data 线段树-成段更新-解题报告

    Copying Data Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description W ...

  5. Codeforces Round #149 (Div. 2) E. XOR on Segment (线段树成段更新+二进制)

    题目链接:http://codeforces.com/problemset/problem/242/E 给你n个数,m个操作,操作1是查询l到r之间的和,操作2是将l到r之间的每个数xor与x. 这题 ...

  6. hdu 4747【线段树-成段更新】.cpp

    题意: 给出一个有n个数的数列,并定义mex(l, r)表示数列中第l个元素到第r个元素中第一个没有出现的最小非负整数. 求出这个数列中所有mex的值. 思路: 可以看出对于一个数列,mex(r, r ...

  7. HDU1698_Just a Hook(线段树/成段更新)

    解题报告 题意: 原本区间1到n都是1,区间成段改变成一个值,求最后区间1到n的和. 思路: 线段树成段更新,区间去和. #include <iostream> #include < ...

  8. POJ.3468 A Simple Problem with Integers(线段树 区间更新 区间查询)

    POJ.3468 A Simple Problem with Integers(线段树 区间更新 区间查询) 题意分析 注意一下懒惰标记,数据部分和更新时的数字都要是long long ,别的没什么大 ...

  9. HDU 3577 Fast Arrangement ( 线段树 成段更新 区间最值 区间最大覆盖次数 )

    线段树成段更新+区间最值. 注意某人的乘车区间是[a, b-1],因为他在b站就下车了. #include <cstdio> #include <cstring> #inclu ...

随机推荐

  1. Mac OS用docker Desktop安装单节点kubernetes

    方案: 安装方式:阿里云minikube,k8s官方minikube,kubeadm, docker Desktop中自带第k8s 安装环境:在linux虚拟机中安装k8s,在macos中安装k8s, ...

  2. Java中的文件上传和下载

    文件上传原理: 早期的文件上传机制: 在TCP/IP中.最早出现的文件上传机制是FTP.他是将文件由客户端发送到服务器的标准机制. jsp中的文件上传机制: 在jsp编程中不能使用FTP的方法来上传文 ...

  3. gravity layout_gravity

    gravity:控制当前视图的内容/子view layout_gravity:控制视图本身

  4. Linux时间子系统之二:表示时间的单位和结构【转】

    本文转载自:http://blog.csdn.net/droidphone/article/details/7979295 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+] ...

  5. FZU1977 Pandora adventure —— 插头DP

    题目链接:https://vjudge.net/problem/FZU-1977  Problem 1977 Pandora adventure Accept: 597    Submit: 2199 ...

  6. vue开发:移动端图片上传

    因为最近遇到个移动端上传头像的需求,上传到后台的数据是base64位,其中为了提高用户体验,把比较大的图片用canvas进行压缩之后再进行上传.在移动端调用拍照功能时,会发生图片旋转,为了解决这个问题 ...

  7. GYM 100741A Queries

    传送门 题目大意: 一个长度为n的序列,q次三种操作 +p  r:下标为p的数+r -p r:下标为p的数-r s l r mod [L,R]中有多少数%m=mod,m已经给出 题解: 开十个树状数组 ...

  8. 分享Ubuntu下一些很棒的软件(一)

    分享一些我在Ubuntu下常用的软件. Goolge Chrome/Firefox/Thunderbird这些重量级的跨平台的软件虽然很强大,但大家应该都比较熟悉了,没有太多必要在这里介绍.本文涉及到 ...

  9. HAOI2012高速公路——子区间计算

    题目:https://www.luogu.org/problemnew/show/P2221 似乎按点来算贡献很方便,但我抱住一篇没有这样的题解磕了两天... 以下转载: 题意:维护一段数列 支持区间 ...

  10. 微信小程序服务类目大坑:特殊行业服务类目所需资质材料

    作为一个技术开发人员,遇到特殊行业服务类目所需资质材料,只能叫苦连天了,妈的,这个不是技术可以解决的问题,如果技术可以解决的问题都不是问题. 百牛信息技术bainiu.ltd整理发布于博客园 特殊行业 ...