時/空限制:1s / 64mb
給定乙個長度為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≤1051≤n,m≤105,
|d|≤10000|d|≤10000,
|a[i]|≤1000000000|a[i]|≤1000000000
輸入樣例:
10 5
1 2 3 4 5 6 7 8 9 10
q 4 4
q 1 10
q 2 4
c 3 6 3
q 2 4
輸出樣例:
4559
15
懶標記:當前節點所有子節點需要維護的資訊。
#include#define ll long long
using namespace std;
const int n = 100000 + 10;
struct nodetr[n*4];
ll a[n];
int n,m;
void pushup(node &u, node &l, node &r)
void pushup(int u)
void pushdown(int u)//使用懶標計更新子節點
}void build(int u, int l, int r)
; else
;int mid = (l + r) >> 1;
build(u<<1, l, mid);
build(u<<1|1, mid+1, r);
pushup(u);
}}ll query(int u, int l, int r)
void modify(int u, int l, int r, int v)
else
}int main()
}return 0;
}// 10 5
// 11 15 -12 -16 18 -8 -4 -9 16 18
// q 7 8
// c 5 10 -4
// q 6 6
// c 3 4 2
// q 1 4
乙個簡單的整數問題2
給定乙個長度為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條指...
乙個簡單的整數問題
給定長度為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條指令,每條指令的格式如題...