1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#include<bits/stdc++.h> using namespace std; const int N = 3e5 + 9; using ll = long long; int a[N]; vector<int> LS; struct op { int a, b; } add[N], que[N];
int getindex(int x) { return lower_bound(LS.begin(), LS.end(), x) - LS.begin() + 1; }
int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); int n, q; cin >> n >> q; for (int i = 1; i <= n;++i) { int w, x; cin >> w >> x; LS.push_back(w); add[i] = {w, x}; } for (int i = 1; i <= q;++i) { int l, r; cin >> l >> r; LS.push_back(l), LS.push_back(r); que[i] = {l, r}; } sort(LS.begin(), LS.end()); LS.erase(unique(LS.begin(), LS.end()), LS.end()); for (int i = 1; i <= n;i++) a[getindex(add[i].a)] += add[i].b; for (int i = 1;i<=LS.size();i++) a[i] += a[i - 1]; for (int i = 1; i <= q;i++) { int l = getindex(que[i].a), r = getindex(que[i].b); cout << a[r] - a[l - 1]<<'\n'; } return 0; }
|