Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <string>
- #include <algorithm>
- #include <vector>
- #include <iostream>
- using namespace std;
- int main()
- {
- int n, x, y, k = 0, m, bgn = -10000000, p, count = 0, end;
- cin >> n;
- vector < pair < int, int > > a;
- vector < pair <int, int > > d;
- for (int i = 0; i < n; i++)
- {
- cin >> x >> y;
- a.push_back(make_pair(x, 0));
- a.push_back(make_pair(y, 1));
- }
- cin >> m;
- vector <int> point(m);
- for (int i = 0; i < m; i++)
- cin >> point[i];
- sort(a.begin(), a.end());
- cin >> p;
- if (p > 0)
- {
- for (int i = 0; i < int(a.size()); i++)
- if (a[i].second == 0)
- {
- if (k == p)
- d.push_back(make_pair(bgn, a[i].first - 1));
- k++;
- if (k == p)
- bgn = a[i].first;
- }
- else
- {
- if (k == p)
- {
- if (i + 1 == int(a.size()) || a[i + 1].first > a[i].first)
- end = a[i].first;
- else
- end = a[i].first - 1;
- d.push_back(make_pair(bgn, a[i].first));
- }
- k--;
- }
- for (int i = 0; i < m; i++)
- for (int j = 0; j < int(d.size()); j++)
- if (point[i] >= d[j].first && point[i] <= d[j].second)
- {
- count++;
- break;
- }
- }
- else
- {
- bool flag = true;
- d.push_back(make_pair(-100000000, a[0].first));
- for (int i = 0; i < int(a.size()); i++)
- if (a[i].second == 1)
- {
- k--;
- if (k == 0)
- if (i + 1 == int(a.size()) || a[i + 1].first > a[i].first + 1)
- {
- bgn = a[i].first + 1;
- flag = true;
- }
- else
- flag = false;
- }
- else
- {
- if (k == 0 && i > 1 && flag)
- d.push_back(make_pair(bgn, a[i].first - 1));
- k++;
- }
- d.push_back(make_pair(a[int(a.size()) - 1].first, 100000000));
- for (int i = 0; i, m; i++)
- for (int j = 0; j < int(d.size()); j++)
- if (point[i] >= d[j].first && point[i] <= d[j].second)
- {
- count++;
- break;
- }
- }
- cout << count;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement