当前位置:网站首页>AcWing 243. A simple integer problem 2 (tree array interval modification interval query)
AcWing 243. A simple integer problem 2 (tree array interval modification interval query)
2022-07-06 03:51:00 【Jacob* ̄▽ ̄*】


The question :

This problem requires the use of tree array Interval modification and Interval query .
Ideas :
stay Last question in , We maintain an original array with a tree array a The differential array of b, For every instruction “C l r d”, hold b[i] add d, And then b[r+1] subtract d.
What has been discussed is :b Of 1~x The prefix and b[1~x] After these instructions ,a[x] Increased value .
that a The prefix and of the sequence a[1~x] The overall value added is 
The above formula can be further rewritten into :

Derivation process :

Therefore, in this problem, we can consider adding a tree array , For maintenance i*b[i] And
, The above formula can be calculated directly .
To be specific , We build two tree arrays , Respectively c1, c2, Initially, all values are 0, For every instruction “C l r d”, Perform four operations :
- ①
c1OflPosition plusd. - ②
c1Ofr+1Position subtractiond. - ③
c2OflPosition plusl*d. - ④
c2Ofr+1Position subtraction(r+1)*d.
For every instruction “Q l r”, We can directly apply the formula derived above to calculate .
This problem brings us a kind of thought , Separate items that contain multiple variables , Make different variables in the formula independent of each other , This idea is very important .
Time complexity :
O(mlogn)
Code :
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5+10;
int n, m;
int a[N], c1[N], c2[N];
int read() {// Fast reading
int x=0,f=1; char c=getchar();
while(c<'0' || c>'9') {if(c=='-') f=-1; c=getchar();}
while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();}
return x*f;
}
inline int lowbit(int x) {return x & (-x);}
int ask(int c[], int x)
{
int ans = 0;
while(x) {ans+=c[x], x-=lowbit(x);}
return ans;
}
int add(int x, int y, int c[])
{
for(; x<=n; x+=lowbit(x)) c[x]+=y;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;++i)
{
a[i] = read();
add(i, a[i]-a[i-1], c1), add(i, i*(a[i]-a[i-1]), c2);
}
while(m--)
{
char op[2];
int l, r, d;
scanf("%s", op);
l = read(), r = read();
if(*op=='C')
{
d = read();
add(l, d, c1), add(l, l*d, c2);
add(r+1, -d, c1), add(r+1, -(r+1)*d, c2);
}
else
{
printf("%lld\n", (r+1)*(ask(c1, r)) - ask(c2, r) - l*(ask(c1, l-1)) + ask(c2, l-1));
}
}
return 0;
}
边栏推荐
- UDP reliable transport protocol (quic)
- Remote Sensing Image Super-resolution and Object Detection: Benchmark and State of the Art
- mysql关于自增长增长问题
- 使用JS完成一个LRU缓存
- C (thirty) C combobox listview TreeView
- A brief introduction to symbols and link libraries in C language
- 1.16 - check code
- Pytoch foundation - (2) mathematical operation of tensor
- Ks008 SSM based press release system
- 【FPGA教程案例12】基于vivado核的复数乘法器设计与实现
猜你喜欢

Maxay paper latex template description

Thread sleep, thread sleep application scenarios

Suggestions for new engineer team members

2.2 STM32 GPIO operation

Chinese brand hybrid technology: there is no best technical route, only better products

Ks008 SSM based press release system

Custom event of C (31)

No qualifying bean of type ‘......‘ available

C#(三十)之C#comboBox ListView treeView

WPF效果第一百九十一篇之框选ListBox
随机推荐
Canvas cut blocks game code
2.2 STM32 GPIO操作
Custom event of C (31)
User perceived monitoring experience
How to standardize the deployment of automated testing?
Network security - Security Service Engineer - detailed summary of skill manual (it is recommended to learn and collect)
3.2 detailed explanation of rtthread serial port device (V2)
MySQL 中的数据类型介绍
mysql从一个连续时间段的表中读取缺少数据
2.2 fonctionnement stm32 GPIO
Schnuka: what is visual positioning system and how to position it
施努卡:3d视觉检测应用行业 机器视觉3d检测
How do we make money in agriculture, rural areas and farmers? 100% for reference
Shell pass parameters
自动化测试的好处
在字节做测试5年,7月无情被辞,想给划水的兄弟提个醒
施努卡:视觉定位系统 视觉定位系统的工作原理
Overview of super-resolution reconstruction of remote sensing images
SSTI template injection explanation and real problem practice
Suggestions for new engineer team members