当前位置:网站首页>Luogu P3368: 【模板】树状数组 2
Luogu P3368: 【模板】树状数组 2
2022-08-05 08:11:00 【9ack!?】
题目
这个题目的名字虽然叫树状数组,但是我用线段树做的哈哈。线段树虽然没有树状数组快,但是能处理的问题相对来说更多;就像分块比线段树能解决的问题更多一样,越暴力的算法能解决的问题也越多。这个和我之前写的几个还是换汤不换药。
吐槽
这个csdn是什么毛病了, 文章字少就代表质量不高吗?解释性的东西放在代码里不行吗,我写个文章还提示我质量低得不到流量推广,真就把自己平台这点流量看的这么香。
代码
#include <cstdio>
#include <algorithm>
using namespace std;
#define lc k<<1
#define rc k<<1|1
typedef long long ll;
const int maxn = 5e6+5;
ll a[maxn], f[maxn<<2], v[maxn<<2];
inline void build_tree(int k, int l, int r) {
v[k] = 0;
if (l == r) {
f[k] = a[l]; return; }
int m = (l+r) >> 1;
build_tree(lc, l, m);
build_tree(rc, m+1, r);
f[k] = f[lc] + f[rc];
}
inline void push_down(int k, int l, int r) {
if(v[k]) {
int m = (l+r) >> 1;
f[lc] += (m-l+1)*v[k];
v[lc] += v[k];
f[rc] += (r-m)*v[k];
v[rc] += v[k];
v[k] = 0;
}
}
inline void update(int k, int l, int r, int x, int y, int z) {
push_down(k, l, r);
if(l == x && r == y) {
v[k] = z; f[k] += (r-l+1)*z; return; }
int m = (l+r) >> 1;
if(y <= m) {
update(lc, l, m, x, y, z);
} else if(x > m) {
update(rc, m+1, r, x, y, z);
} else {
update(lc, l, m, x, m, z);
update(rc, m+1, r, m+1, y, z);
}
f[k] = f[lc] + f[rc];
}
inline ll query(int k,int l, int r, int x, int y) {
push_down(k, l, r);
if(l == x && r == y) return f[k];
int m = (l+r) >> 1;
ll ans;
if(y <= m) {
ans = query(lc, l, m, x, y);
} else if(x > m) {
ans = query(rc, m+1, r, x, y);
} else {
ans = query(lc, l, m, x, m) + query(rc, m+1, r, m+1, y);
}
f[k] = f[lc] + f[rc];
return ans;
}
int main(void)
{
freopen("in.txt", "r", stdin);
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i) {
scanf("%lld", &a[i]);
}
build_tree(1, 1, n);
int op, x, y;
ll k;
while(m--) {
scanf("%d", &op);
if(op == 1) {
scanf("%d%d%lld", &x, &y, &k);
update(1, 1, n, x, y, k);
} else {
scanf("%d", &x);
printf("%lld\n", query(1, 1, n, x, x));
}
}
return 0;
}
边栏推荐
- nn.unfold和nn.fold
- JVM运行流程,运行时数据区,类加载,垃圾回收,JMM解析
- 利用Jenkins的持续集成
- Qt编写自定义控件:文字聚光灯效果之一
- 浅谈自动采集程序及入库
- Basic introduction of stack and queue and C language implementation of functions such as creation, destruction, entry and exit, counting the number of elements, viewing elements, etc., as well as stac
- routing----router
- Detailed explanation of DNS query principle
- 作为一个男人必须明白的22个道理
- 线性代数对角化
猜你喜欢
Support touch screen slider carousel plugin
力扣刷题八月第一天
Redis缓存以及存在的问题--缓存穿透、缓存雪崩、缓存击穿及解决方法
支持触屏slider轮播插件
原型&原型链
How to make pictures clear in ps, self-study ps software photoshop2022, simple and fast use ps to make photos clearer and more textured
链表专项之环形链表
关于MP3文件中找不到TAG标签的问题
Fiddler工具讲解
ps怎么拼图,自学ps软件photoshop2022,PS制作拼图效果
随机推荐
嵌入式系统:基本定时器
Data source object management Druid and c3p0
Redis实现分布式锁-原理-问题详解
行业应用软件项目经理三步曲
Fiddler tool explanation
【结构体内功修炼】结构体实现位段(二)
高效使用数码相机的诀窍
SVG大鱼吃小鱼动画js特效
JVM运行流程,运行时数据区,类加载,垃圾回收,JMM解析
在ASP控制数字及字母输入
tear apart loneliness
ps怎么拼图,自学ps软件photoshop2022,PS制作拼图效果
Fiddler工具讲解
关于MP3文件中找不到TAG标签的问题
Iptables implementation under the network limited (NTP) synchronization time custom port
图扑软件与华为云共同构建新型智慧工厂
爱情是一部忧伤的乐曲
Stored procedure writing experience and optimization measures
版本号命名规则
漂亮MM和普通MM的区别