Submission #1190996

#TimeUsernameProblemLanguageResultExecution timeMemory
1190996raspyExhibition (JOI19_ho_t2)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>

#define int long long
#define vi vector<int>
#define ii pair<int, int>
#define f first
#define s second
#define all(x) (x).begin(), (x).end()
#define P 31
#define mod 1'000'000'007
#define inf 1'000'000'000'000
#define pb push_back
#define str string
#define sz(x) (x).size()
#define vvi vector<vi>
#define fun function
#define oopt cin.tie(0);cout.tie(0);ios_base::sync_with_stdio(false);
#define file freopen("problemname.in", "r", stdin); freopen("pr.out", "w", stdout);
#define dbg(v) cout << "Line(" << __LINE__ << ") -> " << #v << " = " << (v) << endl;

using namespace std;
template <class T, int SZ> using arr = array<T, SZ>;

struct slika
{
	int vl, vr;
};

slika a[200005];
int b[200005];
int opcije[200005];

signed main()
{
	oopt;
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < n; i++)
		cin >> a[i].vl >> a[i].vr;
	sort(a, a+n, [](slika&p, slika&d){
		if (p.vr == d.vr)
			return p.vl < d.vl;
		return p.vr < d.vr;
	});
	// cout << m << "\n";
	for (int i = 0; i < m; i++)
		cin >> b[i];
	sort(b, b+m);
	set<int> st;
	for (int i = 0; i < m+1; i++)
		st.insert(i);
	for (int i = 0; i < n; i++)
	{
		int l = -1, r = m;
		while (l+1 < r)
		{
			int mid = (l+r)/2;
			if (b[mid] >= a[i].vl)
				r = mid;
			else
				l=mid;
		}
		int pravi = r;
		if (st.count(pravi) == 0)
		{
			st.insert(pravi);
			auto it = st.find(pravi);
			it++;
			st.erase(pravi);
			pravi = *it;
			if (pravi < m)
				st.erase(pravi);
		}
		else if (pravi < m)
			st.erase(pravi);
		opcije[i] = pravi;
	}
	vi lis;
	for (int i = 0; i < n; i++)
	{
		if (opcije[i] >= m)
			continue;
		if (lis.empty() || opcije[i] >= lis.back())
			lis.pb(opcije[i]);
		else
		{
			int l = -1, r = lis.size();
			while (l+1<r)
			{
				int mid = (l+r)/2;
				if (lis[mid] > opcije[i])
					r = mid;
				else
					l=mid;
			}
			lis[r+1] = opcije[i];
		}
	}
	cout << min((int)lis.size(), m) << "\n";
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...