#include <bits/stdc++.h>
using namespace std;
int main(void)
{
int n,m,s,v,c;
cin>>n>>m;
set<int> frameset;
vector<int> frame;
vector<int> lnds,lnds2;
vector<int> frameleft;
vector<pair<int,int>> x;
for(int i=0;i<n;i++)
{
cin>>s>>v;
x.push_back({v,s});
}
for(int i=0;i<m;i++)
{
cin>>c;
frame.push_back(c);
}
sort(x.begin(),x.end());
for(int i=0;i<n;i++)
{
swap(x[i].first,x[i].second);
}
sort(frame.begin(),frame.end());
frameleft.push_back(1);
for(int i=1;i<m;i++)
{
if(frame[i]!=frame[i-1])
{
frameleft.push_back(1);
}
else
{
frameleft[frameleft.size()-1]++;
}
}
frame.erase(unique(frame.begin(),frame.end()),frame.end());
m=frame.size();
for(int i=0;i<m;i++)
{
frameset.insert(frame[i]);
//cout<<frame[i]<<" "<<frameleft[i]<<"\n";
}
for(int i=0;i<n;i++)
{
set<int>::iterator itr=frameset.lower_bound(x[i].first),itr2;
int fi=lower_bound(frameleft.begin(),frameleft.end(),*itr)-frameleft.begin();
int x2,fi2;
if(lnds.empty()||lnds.back()<=x[i].first)
{
if(itr==frameset.end())
{
//cout<<frameset.size()<<" ";
continue;
}
frameleft[fi]--;
lnds.push_back(x[i].first);
lnds2.push_back(fi);
if(frameleft[fi]==0)
{
frameset.erase(itr);
}
}
else
{
fi2=upper_bound(lnds.begin(),lnds.end(),x[i].first)-lnds.begin();
frameleft[lnds2[fi2]]++;
frameset.insert(frame[fi]);
itr2=frameset.lower_bound(x[i].first);
fi=lower_bound(frameleft.begin(),frameleft.end(),*itr)-frameleft.begin();
frameleft[fi--];
lnds[fi2]=x[i].first;
lnds2[fi2]=fi;
if(frameleft[fi]==0)
{
frameset.erase(itr);
}
}
}
cout<<lnds.size();
return 0;
}
/*
3 4
10 20
5 1
3 5
4
6
10
4
4 4 6 10
5 3 10
4 5 7 7 7 4 3 3 3 4 4
3 2
1 2
1 2
1 2
1
1
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |