Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define f first
- #define s second
- #define ll long long
- #define pb push_back
- #define IOS ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
- using namespace std;
- const int MAXN = 5e5 + 10;
- const int MOD = 1e9 + 7;
- int t[4 * MAXN];
- void update(int v, int tl, int tr, int pos, int val){
- if (tl > tr){
- return;
- }
- if (tl == tr){
- t[v] += val;
- return;
- }
- int tm = (tl + tr) >> 1;
- if (pos <= tm){
- update((v << 1), tl, tm, pos, val);
- }
- else{
- update((v << 1) | 1, tm + 1, tr, pos, val);
- }
- t[v] = t[(v << 1)] + t[(v << 1) | 1];
- }
- int get_sum(int v, int tl, int tr, int l, int r){
- if (l > r){
- return 0;
- }
- if (l == tl && r == tr){
- return t[v];
- }
- int tm = (tl + tr) >> 1;
- return get_sum((v << 1), tl, tm, l, min(r, tm))
- + get_sum((v << 1) | 1, tm + 1, tr, max(l, tm + 1), r);
- }
- vector <int> g[MAXN];
- int main(){
- IOS;
- int n, m;
- cin >> n >> m;
- for (int i = 0; i < m; i++){
- int u, v;
- cin >> u >> v;
- g[max(u, v)].pb(min(u, v));
- }
- int q;
- cin >> q;
- pair <pair <int, int>, int> a[q + 1];
- for (int i = 1; i <= q; i++){
- int l, r;
- cin >> l >> r;
- a[i] = {{r, l}, i};
- }
- sort(a + 1, a + q + 1);
- int pos = 0;
- int ans[q + 1] = {0};
- for (int i = 1; i <= q; i++){
- int l = a[i].f.s;
- int r = a[i].f.f;
- for (int j = pos + 1; j <= r; j++){
- for (int v : g[j]){
- update(1, 1, n, v, 1);
- }
- }
- pos = r;
- ans[a[i].s] = r - l + 1 - get_sum(1, 1, n, l, r);
- }
- for (int i = 1; i <= q; i++){
- cout << ans[i] << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment