A Simple Problem with Integers POJ - 3468 (线段树)
2024-10-08 00:10:29
思路:线段树,区间更新,区间查找
#include<iostream>
#include<vector>
#include<string>
#include<cmath>
#include<set>
#include<algorithm>
#include<cstdio>
#include<map>
#include<cstring>
#include<list> #define MAXSIZE 100010 using namespace std; long long tree[*MAXSIZE];
long long lz[*MAXSIZE];
int N, Q; void init()
{
memset(tree, , sizeof(tree));
memset(lz, , sizeof(lz));
} void build(int node, int l, int r)
{
if(l == r)
{
scanf("%lld", &tree[node]);
return;
} int mid = (l+r)/;
build(node*, l, mid);
build(node*+, mid+, r); tree[node] = tree[node*] + tree[node*+];
} void push_down(int node, int l, int r)
{
if(lz[node])
{
int mid = (l+r)/;
lz[node*] += lz[node];
lz[node*+] += lz[node];
tree[node*] += (mid-l+)*lz[node];
tree[node*+] += (r-mid)*lz[node];
lz[node] = ;
}
} void update_range(int node, int l, int r, int L, int R, int add)
{
if(l <= L && r >= R)
{
lz[node] += add;
tree[node] += (R-L+)*add;
return;
}
push_down(node, L, R);
int mid = (L+R)/;
if(mid >= l)
update_range(node*, l, r, L, mid, add);
if(mid < r)
update_range(node*+, l, r, mid+, R, add);
tree[node] = tree[node*] + tree[node*+];
} long long query_range(int node, int l, int r, int L, int R)
{
if(l <= L && r >= R)
{
return tree[node];
}
push_down(node, L, R);
int mid = (L+R)/;
long long sum = ;
if(mid >= l)
sum += query_range(node*, l, r, L, mid);
if(mid < r)
sum += query_range(node*+, l, r, mid+, R); return sum;
} int main()
{
scanf("%d%d", &N, &Q);
init();
build(, , N);
while(Q--)
{
char ch;
scanf(" %c", &ch);
if(ch == 'Q')
{
int a, b;
scanf("%d%d", &a, &b);
printf("%lld\n", query_range(, a, b, , N));
}
else if(ch == 'C')
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
update_range(, a, b, , N, c);
}
} return ;
}
最新文章
- Win10 VC++6 无法启动此程序,因为计算机中丢失mfc42d.dll 需要提升
- 【数据采集】VBA数据采集可用 COM 组件
- 为docker配置固定ip
- Openxml入门---Openxm读取Excel数据
- 初探YAML
- 为什么NOLOCK查询提示是个不明智的想法
- go中间的&;和*
- networkRequest
- php-Mysql示例1
- 给Ubuntu 16.04更换更新源
- A*算法的理解与简单实现
- HTML面试题
- 快速开发 HTML5 交互式地铁线路图
- jquery $(&#39;#form1&#39;).serialize()序列化提交表单
- ili9325--LCD寄存器配置研究
- ELK--filebeat nginx模块
- VUE中过了一遍还不熟悉的东西
- Android SO UPX壳问题小记
- 软件申请获取root权限
- spark not contain