【樹狀陣列 區間更新區間查詢】code
Link:http://codevs.cn/problem/1082/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
//c[i] = a[i]-a[i-1]
//c2[i] = (i-1)*c[i]
//樹狀陣列維護c,c2
//ans[1-n]: n*sigma(c,n) - sigma(c2,n)
const int N = 200010;
#define lowbit(i) (i&(-i))
LL c[N],c2[N];
LL n;
void up(LL *r,LL x,LL val){
while(x<=n){
r[x] += val;
x += lowbit(x);
}
}
LL down(LL *r,LL x){
LL ans = 0;
while(x){
ans += r[x];
x -= lowbit(x);
}
return ans;
}
int main()
{
LL q;
scanf("%lld",&n);
for(int i = 1; i <= n; i++){
LL f;
scanf("%lld",&f);
up(c,i,f); up(c,i+1,-f);
up(c2,i,f*(i-1)); up(c2,i+1,-f*(i));
}
scanf("%lld",&q);
while(q--){
int type;
scanf("%d",&type);
LL a,b,f;
if(type==1){
scanf("%lld%lld%lld",&a,&b,&f);
up(c,a,f); up(c,b+1,-f);
up(c2,a,f*(a-1)); up(c2,b+1,-f*b);
}
else{
scanf("%lld%lld",&a,&b);
LL l = (a-1)*down(c,a-1) - down(c2,a-1);
LL r = b*down(c,b) - down(c2,b);
printf("%lld\n",r-l);
}
}
return 0;
}
相關文章
- 樹狀陣列單點更新和區間查詢陣列
- 樹狀陣列的區間查詢與區間修改陣列
- HDU 1556【區間更新+單點查詢 樹狀陣列】陣列
- POJ 1195-Mobile phones(二維樹狀陣列-區間更新區間查詢)陣列
- POJ 3468 【區間修改+區間查詢 樹狀陣列 | 線段樹 | 分塊】陣列
- 樹狀陣列模板題 & (樹狀陣列 1:單點修改,區間查詢)陣列
- 變化的區間樹狀陣列,單點查詢陣列
- HDU 1556-Color the ball(樹狀陣列-區間修改 單點查詢)陣列
- D 區間求和 [數學 樹狀陣列]陣列
- poj 3237 樹鏈剖分(區間更新,區間查詢)
- 關於區間操作查詢(字首和與差分)+樹狀陣列基礎陣列
- POJ 2155-Matrix(二維樹狀陣列-區間修改 單點查詢)陣列
- HDU1166 敵兵佈陣【樹狀陣列 單點修改+區間查詢】陣列
- HYSBZ 2243 樹鏈剖分(區間更新,區間查詢)較難
- 芻議線段樹 2 (區間修改,區間查詢)
- 求區間不同數的個數【樹狀陣列求解】陣列
- 【樹狀陣列 區間修改,單點求值】1556 Color the ball陣列
- LintCode 二叉查詢樹中搜尋區間
- 【Leetcode每日一題】327. 區間和的個數(線段樹/樹狀陣列)LeetCode每日一題陣列
- hihocoder 1078 線段樹的區間修改 (線段樹 區間更新 模板)
- POJ3468 A Simple Problem with Integers---樹狀陣列(區間問題)陣列
- 日期區間查詢
- Leetcode 327. 區間和的個數 (字首和 + 離散化 + 樹狀陣列)LeetCode陣列
- spoj375 樹鏈剖分(單點更新,區間查詢)
- 1082 線段樹練習 3 區間查詢與區間修改
- 【樹狀陣列 單點修改,區間求值】hdu 1166 敵兵佈陣陣列
- Codeforces 52C (線段樹區間更新)
- HDU1698 Just a Hook【線段樹基礎:區間修改+區間查詢】Hook
- 線段樹(1)建樹、單點修改、單點查詢、區間查詢和例題
- Laravel MongoDB 時間區間查詢的問題LaravelMongoDB
- hdu4417 樹狀陣列(求指定區間比指定數小的數的個數)陣列
- HDU1166 敵兵佈陣【線段樹基礎:點修改+區間查詢】
- 線段樹維護區間等差數列
- POJ 2777-Count Color(線段樹-區間染色查詢)
- HDU 1698 Just a Hook (線段樹區間更新)Hook
- POJ 3468 A Simple Problem with Integers (線段樹 區間更新)
- 區間更新+差分
- javascript擷取陣列的一個區間JavaScript陣列