假定有乙個無限長的數軸,數軸上每個座標上的數都是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...