Submission #788501

#TimeUsernameProblemLanguageResultExecution timeMemory
788501mpawicka_77Exhibition (JOI19_ho_t2)C++14
0 / 100
1 ms340 KiB
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+3;
int nr[N],M[N];
pair<int,int>T[N];
int n,m;
int bs(int x,int dl)
{
    int pocz=0,kon=dl+1;
    while(pocz+1<kon)
    {
        int mid=(pocz+kon)/2;
        if(nr[mid]>x)kon=mid;
        else pocz=mid;
    }
    return kon;
}
bool f(int x)
{
    for(int i=1;i<=n;i++)nr[i]=1e9;
    int maks=0;
    for(int i=1;i<=n;i++)
    {
        int a=T[i].second,ind=bs(a,maks);
        if(a<=M[ind+x])
        {
            nr[ind]=min(a,nr[ind]);
            maks=max(maks,ind);
        }
        if(maks+x==m)return true;
    }
    return false;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>T[i].second>>T[i].first;
    }
    sort(T+1,T+n+1);
    for(int i=1;i<=m;i++)cin>>M[i];
    sort(M+1,M+m+1);
    int pocz=0,kon=min(m,n)+1;
    while(pocz+1<kon)
    {
        int mid=(pocz+kon)/2;
        if(f(m-mid))pocz=mid;
        else kon=mid;
    }
    cout<<pocz;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...