Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define endl '\n'
- struct Coco
- {
- bool czy_odc; //jesli 0 - punkt, jesli 1 - odcinek
- int x, y;
- int y_d, y_g;
- bool czy_kon; // jesli 0 - początek, jesli 1 - koniec
- int indeks;
- int ind_pocz;
- int wynik;
- };
- bool operator< (Coco &a, Coco &b)
- {
- if(a.x < b.x)
- return true;
- else if(b.x < a.x)
- return false;
- else
- {
- if(a.y < b.y)
- return true;
- else if(b.y < a.x)
- return false;
- else
- {
- if((a.czy_odc = 1 && a.czy_kon == 0) || (b.czy_odc = 1 && b.czy_kon == 0))
- return true;
- else if((a.czy_odc = 1 && a.czy_kon == 1) || (b.czy_odc = 1 && b.czy_kon == 1))
- return false;
- }
- }
- }
- struct Tree
- {
- int sz = 1;
- vector<int> t;
- Tree(int n)
- {
- while(sz < n)
- sz *= 2;
- t.resize(2 * sz);
- }
- void dodaj(int v)
- {
- v += sz;
- ++t[v];
- v /= 2;
- while(v)
- {
- ++t[v];
- v /= 2;
- }
- }
- int suma(int l, int r)
- {
- l += sz;
- r += sz;
- if(l == r)
- return l;
- int sum = t[l] + t[r];
- while(l / 2 != r / 2)
- {
- if(l % 2 == 1)
- sum += t[l + 1];
- if(r % 2 == 0)
- sum += t[r - 1];
- l /= 2;
- r /= 2;
- }
- return sum;
- }
- };
- int main()
- {
- ios_base::sync_with_stdio(0);
- cin.tie();
- int n, k;
- cin >> n >> k;
- vector<Coco> v(n + 2 * k);
- for(int i = 0; i < n; ++i)
- {
- cin >> v[i].x >> v[i].y;
- v[i].czy_odc = 0;
- }
- for(int i = 0, j = 0; i < 2 * k, j < k; i += 2, ++j)
- {
- cin >> v[n + i].x >> v[n + i].y >> v[n + i + 1].x >> v[n + 1 + i].y;
- v[n + i].czy_odc = 1;
- v[n + i].czy_kon = 0;
- v[n + i + 1].czy_odc = 1;
- v[n + i + 1].czy_kon = 1;
- v[n + i].y_d = v[n + i + 1].y_d = v[n + i].y;
- v[n + i].y_g = v[n + i + 1].y_g = v[n + i + 1].y;
- v[n + i].indeks = v[n + i + 1].indeks = i / 2;
- v[n + i + 1].ind_pocz = n + i;
- }
- sort(v.begin(), v.end());
- Tree t(1e6 + 1);
- vector<int> answ(k);
- for(int i = 0; i < n + 2 * k; ++i)
- {
- if(v[i].czy_odc == 0)
- t.dodaj(v[i].y);
- else
- {
- v[i].wynik = t.suma(v[i].y_d, v[i].y_g);
- if(v[i].czy_kon == 0)
- continue;
- else
- answ[v[i].indeks] = v[i].wynik - v[v[i].ind_pocz].wynik;
- }
- }
- for(int &i : answ)
- cout << i << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement