乙個簡單的整數問題2 懶標記簡單應用

2021-10-09 02:38:19 字數 1382 閱讀 8448

時/空限制: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條指令,每條指令的格式如題...