POJ3468——树状数组支持两个区间操作
2024-10-12 15:48:37
题目:http://poj.org/problem?id=3468
推断过程可自己查,得式子:fixsum(x) = (x+1) * ∑(i=1,x)fi - ∑(i=1,x)i*fi;
其中 f 是真实值的修改量,故修改区间变为f的单点修改,求真实值时取f的前缀和加上自己的原值(真实值)。
故修改i*fi时也是普通的单点修改,再普通维护树状数组,每个影响的部分和都加上这个固定值。
最后求前缀和时用fixsum加上原前缀和得到修改后的。
#include<iostream>
#include<cstdio>
using namespace std;
int n,t,L,R,c;
long long a[],f[],fi[],s[];
char ch;
void add(int x,int c)
{
int y=x;
for(;x<=n;x+=x&-x)
{
f[x]+=c;
fi[x]+=y*c;
}
}
long long query(int x)
{
long long fis=,fs=;
int y=x;
for(;x;x-=x&-x)
fis+=fi[x],fs+=f[x];
return (y+)*fs-fis;
}
int main()
{
scanf("%d%d",&n,&t);
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
s[i]=s[i-]+a[i];
}
while(t--)
{
scanf(" %c",&ch);
if(ch=='C')
{
scanf("%d%d%d",&L,&R,&c);
add(L,c);add(R+,-c);
}
else
{
scanf("%d%d",&L,&R);
printf("%lld\n",(query(R)+s[R])-(query(L-)+s[L-]));
}
}
return ;
}
最新文章
- CSS3的新属性的一下总结
- Linux中cp和scp命令的使用方法
- iOS多线程编程之NSOperation和NSOperationQueue的使用(转自容芳志专栏)
- JavaScript----函数的封装、继承和多态
- SSH学习笔记目录
- 简单的代码实现的炫酷navigationbar
- sed修炼系列(一):花拳绣腿之入门篇
- iot-web增加apis-namespace组件
- 基于FastJson的通用泛型解决方案
- 29.Mysql监控
- js中的行为委托和无类编程
- kubernetes1.3搭建dns服务
- ubuntu apt-get failed
- Mysql 创建数据库命令
- C#泛型的学习
- JUC原子类 1
- 20145206邹京儒MSF基础应用
- jQuery:(一)jQuery简介
- 第三方库(JSONModel)出现file not found
- angularjs 定时器 销毁
热门文章
- POJ 1944 Fiber Communications (枚举 + 并查集 OR 线段树)
- 【VUE】@click加上v-bind绑定切换类名及动画事件
- HDU 2891
- learning uboot auto switch to stanbdy system in qca4531 cpu
- sgu101 欧拉路径 难度:1
- bzoj2438
- 数据结构(C语言)关于树、二叉树、图的基本操作。
- 【LeetCode 234_链表】Palindrome Linked List
- 2019.1.3 WLAN 802.11 a/b/g PHY Specification and EDVT Measurement I - Transmit Power Level
- HDU 1589 Stars Couple(计算几何求二维平面的最近点对和最远点对)