給定乙個長度為n的數列a,以及m條指令,每條指令可能是以下兩種之一:
1、「c l r d」,表示把 a[l],a[l+1],…,a[r] 都加上 d。
2、「q l r」,表示詢問 數列中第 l~r 個數的和。
對於每個詢問,輸出乙個整數表示答案。
輸入格式
第一行兩個整數n,m。
第二行n個整數a[i]。
接下來m行表示m條指令,每條指令的格式如題目描述所示。
輸出格式
對於每個詢問,輸出乙個整數表示答案。
每個答案佔一行。
資料範圍
1≤n,m≤105,
|d|≤10000,
|a[i]|≤1000000000
輸入樣例:105
1234
5678
910q 44
q 110
q 24
c 36
3q 2
4輸出樣例:455
915
線段樹
#include
#define ll long long
using
namespace std;
const
int n =
1e5+10;
struct t t[n *4]
;int a[n]
, n, m;
inline
void
build
(int p,
int l,
int r)
int mid =
(l + r)
>>1;
build
(p <<
1, l, mid)
;build
(p <<1|
1, mid +
1, r);s
(p)=
s(p <<1)
+s(p <<1|
1);}
inline
void
spread
(int p)
}void
change
(int p,
int l,
int r,
int d)
spread
(p);
int mid =(l
(p)+
r(p)
)>>1;
if(l <= mid)
change
(p <<
1, l, r, d);if
(r > mid)
change
(p <<1|
1, l, r, d);s
(p)=
s(p <<1)
+s(p <<1|
1);}
ll ask
(int p,
int l,
int r)
intmain()
else
printf
("%lld\n"
,ask(1
, l, r));
}return0;
}
樹狀陣列
#include
#define ll long long
#define lowbit(x) ((x)&(-(x)))
using
namespace std;
const
int n =
1e5+10;
ll c[2]
[n], a[n]
;int n, m;
inline ll ask
(int k,
int x)
inline
void
add(
int x,
int d)
intmain()
else
}return0;
}
分塊
#include
#define ll long long
using
namespace std;
const
int n =
1e5+10;
ll a[n]
, sum[n]
, add[n]
;int l[n]
, r[n]
, pos[n]
;int n, m, t;
inline
void
build()
if(r[t]
< n)t++
, l[t]
= r[t -1]
+1, r[t]
= n;
for(
int i =
1; i <= t; i++
)for
(int j = l[i]
; j <= r[i]
; j++
) pos[j]
= i, sum[i]
+= a[j];}
inline
void
change
(int l,
int r, ll d)
else
}inline ll ask
(int l,
int r)
else
return ans;
}int
main()
else
printf
("%lld\n"
,ask
(l, r));
}return0;
}
乙個簡單的整數問題
給定長度為n的數列a,然後輸入m行操作指令。第一類指令形如 c l r d 表示把數列中第l r個數都加d。第二類指令形如 q x 表示詢問數列中第x個數的值。對於每個詢問,輸出乙個整數表示答案。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數a i 接下來m行表示m條指令,每條指令的格式如題...
乙個簡單的整數問題
給定長度為n的數列a,然後輸入m行操作指令。第一類指令形如 c l r d 表示把數列中第l r個數都加d。第二類指令形如 q x 表示詢問數列中第x個數的值。對於每個詢問,輸出乙個整數表示答案。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數a i 接下來m行表示m條指令,每條指令的格式如題...
乙個簡單的整數問題
題目描述給定長度為n的數列a,然後輸入m行操作指令。第一類指令形如 c l r d 表示把數列中第l r個數都加d。第二類指令形如 q x 表示詢問數列中第x個數的值。對於每個詢問,輸出乙個整數表示答案。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數a i 接下來m行表示m條指令,每條指令的...