刷刷水题...

前缀和的前缀和...显然树状数组可以写...然而我不会, 只能写线段树了

把改变成加, 然后线段树维护前缀和, 某点p加, 会影响前缀和pre(x)(p≤x≤n), 对[p, n]这段区间加即可, 然后query就求[1, p]的和即可

---------------------------------------------------------------------------------

#include<bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
 
const int maxn = 100009;
 
int L, R, v, seq[maxn], N;
ll cnt[maxn];
 
struct Node {
Node *l, *r;
ll add, sum;
Node() {
add = 0;
}
inline void pushdown() {
if(add) {
l->add += add;
r->add += add;
add = 0;
}
}
inline void update(int len) {
if(l) sum = l->sum + r->sum;
sum += add * len;
if(!l) add = 0;
}
} pool[maxn << 1], *pt = pool, *root;
 
void build(Node* t, int l, int r) {
if(l == r) {
t->sum = cnt[l];
} else {
int m = (l + r) >> 1;
build(t->l = pt++, l, m);
build(t->r = pt++, m + 1, r);
t->update(r - l + 1);
}
}
 
void modify(Node* t, int l, int r) {
if(L <= l && r <= R) {
t->add += v;
} else {
t->pushdown();
int m = (l + r) >> 1;
L <= m ? modify(t->l, l, m) : t->l->update(m - l + 1);
m < R ? modify(t->r, m + 1, r) : t->r->update(r - m);
}
t->update(r - l + 1);
}
 
ll query(Node* t, int l, int r) {
if(L <= l && r <= R) return t->sum;
int m = (l + r) >> 1;
t->pushdown();
t->l->update(m - l + 1); t->r->update(r - m);
return (L <= m ? query(t->l, l, m) : 0) + (m < R ? query(t->r, m + 1, r) : 0);
}
 
int main() {
int m; scanf("%d%d", &N, &m);
for(int i = 1; i <= N; i++) scanf("%d", seq + i);
cnt[0] = 0;
for(int i = 1; i <= N; i++) cnt[i] += cnt[i - 1] + seq[i];
build(root = pt++, 1, N);
while(m--) {
char s[10]; scanf("%s", s);
if(s[0] == 'M') {
int p, v; scanf("%d%d", &p, &v);
::v = v - seq[p];
seq[p] = v;
L = p; R = N;
modify(root, 1, N);
} else {
L = 1;
  scanf("%d", &R);
printf("%lld\n", query(root, 1, N));
}
}
return 0;
}

---------------------------------------------------------------------------------

3155: Preprefix sum

Time Limit: 1 Sec  Memory Limit: 512 MB
Submit: 765  Solved: 341
[Submit][Status][Discuss]

Description

Input

第一行给出两个整数N,M。分别表示序列长度和操作个数
接下来一行有N个数,即给定的序列a1,a2,....an
接下来M行,每行对应一个操作,格式见题目描述

Output

对于每个询问操作,输出一行,表示所询问的SSi的值。

Sample Input

5 3
1 2 3 4 5
Query 5
Modify 3 2
Query 5

Sample Output

35
32

HINT

1<=N,M<=100000,且在任意时刻0<=Ai<=100000

Source

BZOJ 3155: Preprefix sum( 线段树 )的更多相关文章

  1. BZOJ3155:Preprefix sum(线段树)

    Description Input 第一行给出两个整数N,M.分别表示序列长度和操作个数 接下来一行有N个数,即给定的序列a1,a2,....an 接下来M行,每行对应一个操作,格式见题目描述 Out ...

  2. BZOJ 3155: Preprefix sum

    大意:给一个数组,先求出SUM[I],然后动态的求出1-I的SUM[I]的和, 这题得化公式: 树状数组维护两个和:SUM(A[I])(1<=I<=X); SUM(A[I]*(N-I+1) ...

  3. 3155: Preprefix sum

    3155: Preprefix sum https://www.lydsy.com/JudgeOnline/problem.php?id=3155 分析: 区间修改,区间查询,线段树就好了. 然后,这 ...

  4. Bzoj 2752 高速公路 (期望,线段树)

    Bzoj 2752 高速公路 (期望,线段树) 题目链接 这道题显然求边,因为题目是一条链,所以直接采用把边编上号.看成序列即可 \(1\)与\(2\)号点的边连得是. 编号为\(1\)的点.查询的时 ...

  5. 2021.08.09 P4868 Preprefix sum(树状数组)

    2021.08.09 P4868 Preprefix sum(树状数组) P4868 Preprefix sum - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 前缀和(pr ...

  6. BZOJ 3779: 重组病毒(线段树+lct+树剖)

    题面 escription 黑客们通过对已有的病毒反编译,将许多不同的病毒重组,并重新编译出了新型的重组病毒.这种病毒的繁殖和变异能力极强.为了阻止这种病毒传播,某安全机构策划了一次实验,来研究这种病 ...

  7. BZOJ 2124等差子序列 线段树&&hash

    [题目描述 Description] 给一个 1 到 N 的排列{Ai},询问是否存在 1<=p1<p2<p3<p4<p5<…<pLen<=N(Len& ...

  8. bzoj 2957 楼房重建 (线段树+思路)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2957 思路: 用分块可以很简单的过掉,但是这道题也可以用线段树写. 分类讨论左区间最大值对 ...

  9. BZOJ.3938.Robot(李超线段树)

    BZOJ UOJ 以时间\(t\)为横坐标,位置\(p\)为纵坐标建坐标系,那每个机器人就是一条\(0\sim INF\)的折线. 用李超线段树维护最大最小值.对于折线分成若干条线段依次插入即可. 最 ...

随机推荐

  1. 常用类库之.NET中的字符串

    字符串的特性 .不可变性 由于字符串是不可变的的,每次修改字符串,都是创建了一个单独字符串副本(拷贝了一个字符串副本).之所以发生改变只是因为指向了一块新的地址. .字符串池(只针对字符串常量) 当一 ...

  2. Win7下安装Apache+PHP+MySQL

    Win 7 下搭建 WAMP 环境本文安装方法适用于 Windows7 下的 Apache + MySQL + PHP(WAMP)安装,同时也适用于 Windows XP 系统下的安装和配置.一.安装 ...

  3. 实战Windows 7的Windows Media Center

    简介 本文讲述如何通过Windows 7的Windows Media Center搭建强劲的综合娱乐电视系统,同时讲述Windows Media Center的实际使用感受,以及如何通过Windows ...

  4. VC中判断指定窗口是否被其他窗口遮挡

    本来是想判断当前窗口是否在最前面,无奈办法用尽就是不行,于是想换个思路:判断指定窗口是否被其他窗口遮挡.然后掘网三尺,找到了这个: bool CTestTray2Dlg::IsCoveredByOth ...

  5. Libev学习笔记4

    这一节首先分析Libev的定时器部分,然后分析signal部分. 对定时器的使用主要有两个函数: ev_timer_init (&timeout_watcher, timeout_cb, .) ...

  6. 道路软件质量:SourceMonitor

    有些事情必须这样做,不是幸福,但是,缓解疼痛,因为不.更痛苦--这是无奈. 夏中义 <文心独白> 1 简介 博客没有更新了一段时间,了阿里上市的成功之处:选择和坚持.事实上人生并没有绝对的 ...

  7. SharePoint网站集功能介绍

    SharePoint网站集功能介绍 https://support.office.com/zh-cn/article/%E5%90%AF%E7%94%A8%E6%88%96%E7%A6%81%E7%9 ...

  8. ansible不配ssh连接,用户密码登录

    ansible 不配ssh免密链接,直接用ssh用户密码连接,要先装sshpass. 否则会报错: sshpass安装 sshpass下载地址:http://sourceforge.net/proje ...

  9. 如何在macox下面配置集成ios和android游戏教程

    教程截图: 1.准备工作,配置开发环境: 开发环境:mac ox 10.7.3  +   xcode4.2  + ndk r7 + eclipse helios 部署环境:中兴v880  root过了 ...

  10. BZOJ 3304: [Shoi2005]带限制的最长公共子序列( LCS )

    求个LCS, 只是有了限制, 多加一维表示匹配到z串的第几个, 然后用滚动数组 ------------------------------------------------------------ ...