洛谷P2357 守墓人(差分+树状数组)
原题链接
什么是差分?
7 8 6 5 8 18 20 35 //原数组
7 1 -2 -1 3 10 2 15 //差分数组
差分数组的前缀sum[i]即原数组的a[i]
我们构建两个树状数组
sum1:7 1 -2 -1 3 10 2 15
sum2:7 2 -6 -4 15 60 14 120
第二个数组是sum1[i]*i
那么我们怎么算原数组的前缀和呢??
例如求前4个数的和7+8+6+5=26
=5*(7+1-2-1)-(7+2-6-4)=26
即有公式(求原数组前缀和)
sum(i)=(i+1)(sum1[1]+sum1[2]+…+sum1[i])-(sum2[1]+sum2[2]+…+sum2[i])
即(i+1)*差分数组前缀和(i)-差分数组乘坐标数组(即sum2)的前缀和
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <map>
#include <math.h>
#include <cstring>
#include <string.h>
#include <queue>
#include<list>
#include<cstdarg>
#define ll long long
using namespace std;
ll c[200010];
ll a[200010]; ll n, m, k;
inline ll lowbit(ll x) { return x & (-x); }void add(ll x, ll d)
{for (ll i = x; i <= n; i += lowbit(i)){c[i] += d;a[i] += x * d;}
}ll sum(ll x)
{ll s = 0;for (ll i = x; i; i -= lowbit(i)){s += (x + 1) * c[i] - a[i];}return s;
}
int main()
{cin >> n >> m;ll x;ll last = 0;for (ll i = 1; i <= n; i++){cin >> x;add(i, x - last);last = x;}ll main_ = 0;while (m--){ll op;cin >> op;if (op == 1){ll t1, t2, t3;cin >> t1 >> t2 >> t3;add(t1, t3);add(t2 + 1, -t3);}if (op == 2){ll t3;cin >> t3;main_ += t3;}if (op == 3){ll t3;cin >> t3;main_ -= t3;}if (op == 4){ll t1, t2;cin >> t1 >> t2;if (t1 == 1){cout << sum(t2) - sum(t1 - 1) + main_ << '\n';}else cout << sum(t2) - sum(t1 - 1) << '\n';}if (op == 5){cout << sum(1) + main_ << '\n';}}
}
洛谷P2357 守墓人(差分+树状数组)相关推荐
- 洛谷 P2357 守墓人(树状数组)
树状数组区间更新,区间查询的入门好题 const int N=2e5+5;int i,j,k;int n,m,t;ll a[N]; ll c[N][2];ll sum[N];void add(int ...
- 洛谷 - P2617 Dynamic Rankings(树状数组套主席树)
题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a,再给出 m 次操作: Q l r k:返回区间 [ l , r ] 内第 k 大的数 C x y:令 a[ x ] = y 题目分析:其实 ...
- 差分+树状数组 线段树【P2357】 守墓人
题目描述-->p2357 守墓人 敲了一遍线段树,水过. 树状数组分析 主要思路: 差分 简单介绍一下差分(详细概念太麻烦,看下面. 给定一个数组 7 8 6 5 1 8 18 20 35 // ...
- 洛谷 P2357 守墓人
洛谷 P2357 守墓人 题目描述 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然.. ...
- CF1638E. Colorful Operations 珂朵莉树+差分树状数组
题意 给定长度为nnn的序列,初始所有元素置000.要求支持以下三个操作: Color(l, r, c):将区间[l,r][l, r][l,r]区间染色为ccc: Add(c, x):将颜色为ccc的 ...
- 前缀和+差分+ 树状数组
前缀和+差分的理论知识 前缀和相关题: 「USACO16JAN」子共七 Subsequences Summing to Sevens 定理:若两个数相减 mod k == 0,那么这两个数mod k ...
- [蓝桥杯][算法提高VIP]分苹果(差分||树状数组)
题目描述 小朋友排成一排,老师给他们分苹果. 小朋友从左到右标号1-N.有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果. 最后老师想知道每个小朋友有多少苹 ...
- [CQOI2017] 老C的任务(差分 + 树状数组 / K-D tree)
problem luogu-P3755 solution 这题第一眼矩阵内的点权值和,马上就是 K-D tree\text{K-D tree}K-D tree 不过脑子的敲. 这其实就是个二维数点问题 ...
- 『题解』洛谷P2357 守墓人
Portal Portal1: Luogu Description 在一个荒凉的墓地上有一个令人尊敬的守墓人,他看守的墓地从来没有被盗过, 所以人们很放心的把自己的先人的墓安顿在他那守墓人能看好这片墓 ...
最新文章
- 【怎样写代码】偷窥高手 -- 反射技术(四):深入窥视属性
- ECLIPSE 插件使用LINKS目录的用法
- 互联互通下的超级App价值重构
- 【坑爹微信】微信支付相关问题解决
- 【OpenCV3】旋转矩形(cv::RotateRect)的绘制
- Semaphore同步
- ClipDrawable
- win10计算机管理员权限删除,win10删除需管理员权限的文件最佳解决方法
- Backtrader简单均线交易策略“金叉和死叉”
- 社会网络分析:探索人人网好友推荐系统
- postgresql 使用处理 like 'xxoo' 、like 'xxoo%' 、like '%xxoo'、like '%xxoo%'
- opencv remap matlab,如何使用OpenCV的remap函数?
- ENVI_IDL:批量重投影Modis Swath产品并指定范围输出为Geotiff格式+解析
- 基于python的语料库数据处理_基于Python的语料库数据处理(三)
- 动态效果网页HTML+CSS+JS
- 增强低频和高频 matlab,实验名称高斯低频滤波及高频增强滤波.doc
- SQL Server AlwaysOn
- TryHackMe学习笔记-Windows PrivEsc Arena
- 【AJAX是什么】【AJAX的基本使用】
- SQL--多的是,你不知道的事 感觉标题好玩就转了
热门文章
- 借贷宝java_程序猿去哪儿?——北京JAVA专场
- 基于springboot+mybatis+mysql+html实现校园疫情防控管理系统
- twitter如何以图搜图_中学智慧校园如何设计?可以看看这整套的校园CAD设计方案...
- 数据存储领域的“归档Archive”
- 编码器和解码器的概念理解
- 西安翻译学院东区计算机教室,西安翻译学院:200间教室跨进智慧时代
- 解决 unity 按住鼠标右键 WS不能前进后退(我被自己蠢哭了)
- 石油管道泄漏在线监测系统,原来可以这么简单
- nginx 排除 部分地址_在设计排除部分文化的图标时重新设计图标
- Linux | buildroot使用介绍