區間和 離散化

2021-10-02 16:26:00 字數 1377 閱讀 3241

假定有乙個無限長的數軸,數軸上每個座標上的數都是0。現在,我們首先進行 n 次操作,每次操作將某一位置x上的數加c。接下來,進行 m 次詢問,每個詢問包含兩個整數l和r,你需要求出在區間[l, r]之間的所有數的和。

輸入格式

第一行包含兩個整數n和m。接下來 n 行,每行包含兩個整數x和c。

再接下來 m 行,每行包含兩個整數l和r。

輸出格式

共m行,每行輸出乙個詢問中所求的區間內數字和。

資料範圍

−109≤x≤109,1≤n,m≤105,−109≤l≤r≤109,−10000≤c≤10000

輸入樣例:

3 31 2

3 67 5

1 34 6

7 8輸出樣例:80

5這個題的資料範圍較大,但是資料量較小,所以可以將他們進行離散化,離散化之後在進行求和

#include

#include

#include

using

namespace std;

typedef pair<

int,

int> pii;

vector<

int> alls;

vector add,query;

int aa[

323456

],ss[

323456];

intfind

(int x)

return r+1;

}int

main()

);alls.

push_back

(x);

}for

(int i=

0;i; alls.

push_back

(l); alls.

push_back

(r);

}sort

(alls.

begin()

,alls.

end())

; alls.

erase((

unique

(alls.

begin()

,alls.

end())

),alls.

end())

;//去重

for(

auto x:add)

//計算字首和

for(

int i=

1;i<=alls.

size()

;i++

) ss[i]

=ss[i-1]

+aa[i]

;for

(auto x:query)

return0;

}

離散化 區間和

假定有乙個無限長的數軸,數軸上每個座標上的數都是0。現在,我們首先進行 n 次操作,每次操作將某一位置x上的數加c。近下來,進行 m 次詢問,每個詢問包含兩個整數l和r,你需要求出在區間 l,r 之間的所有數的和。輸入格式 第一行包含兩個整數n和m。接下來 n 行,每行包含兩個整數x和c。再接下裡 ...

區間和 離散化

802.區間和 include include include using namespace std typedef pair int,int pii 定義二元組為 pii int n,m const int n 3e5 10 int a n s n vector int alls 儲存所有待離散...

離散化例題 區間和

802.區間和 假定有乙個無限長的數軸,數軸上每個座標上的數都是0。現在,我們首先進行 n 次操作,每次操作將某一位置x上的數加c。接下來,進行 m 次詢問,每個詢問包含兩個整數l和r,你需要求出在區間 l,r 之間的所有數的和。輸入格式 第一行包含兩個整數n和m。接下來 n 行,每行包含兩個整數x...