当前位置:网站首页>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 :
- ①
c1
Ofl
Position plusd
. - ②
c1
Ofr+1
Position subtractiond
. - ③
c2
Ofl
Position plusl*d
. - ④
c2
Ofr+1
Position 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;
}
边栏推荐
- [matlab] - draw a five-star red flag
- Blue Bridge Cup - Castle formula
- Brush questions in summer -day3
- 3.2 detailed explanation of rtthread serial port device (V2)
- [analysis of variance] single factor analysis and multi factor analysis
- Introduction to DeNO
- Record the process of reverse task manager
- How to modify field constraints (type, default, null, etc.) in a table
- Ks003 mall system based on JSP and Servlet
- Cubemx transplantation punctual atom LCD display routine
猜你喜欢
C#(二十七)之C#窗体应用
SSTI template injection explanation and real problem practice
C language circular statement
RT-Thread--Lwip之FTP(2)
SAP ALV color code corresponding color (finishing)
[slam] lidar camera external parameter calibration (Hong Kong University marslab) does not need a QR code calibration board
C language -- structs, unions, enumerations, and custom types
2、GPIO相关操作
BUAA magpie nesting
User experience index system
随机推荐
2.1 rtthread pin device details
UDP reliable transport protocol (quic)
【Qt5】Qt QWidget立刻出现并消失
Shell pass parameters
3分钟带你了解微信小程序开发
2.2 STM32 GPIO操作
C (thirty) C combobox listview TreeView
[matlab] - draw a five-star red flag
JVM的手术刀式剖析——一文带你窥探JVM的秘密
C#(二十九)之C#listBox checkedlistbox imagelist
Factors affecting user perception
How to standardize the deployment of automated testing?
1.16 - check code
In Net 6 CS more concise method
C (XXIX) C listbox CheckedListBox Imagelist
How to modify field constraints (type, default, null, etc.) in a table
Maxay paper latex template description
2、GPIO相关操作
BUAA magpie nesting
Containerization Foundation