cf497C

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdlib>
#include<map>
#include<set>
#include<queue>
#include<vector>
#include<algorithm> 
using namespace std;
typedef pair<int , int>    P;
set<P> SP;
const int maxn=100100;
int n,m;
int answer[maxn];
int number[maxn];
struct Part{
    int l,r,id;
}part[maxn];
struct Actor{
    int l,r,k,id;
}actor[maxn];
bool comp1(Part A,Part B)
{
    if(A.l!=B.l) return A.l<B.l;
    return A.r<B.r;
}
bool comp2(Actor A,Actor B)
{
    if(A.l!=B.l) return A.l<B.l;
    return A.r<B.r;
}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int a,b;
        cin>>a>>b;
        part[i].l=a;part[i].r=b;part[i].id=i;
    }
    cin>>m;
        for(int i=0;i<m;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        actor[i].l=a;actor[i].r=b;actor[i].k=c;actor[i].id=i;
        number[i]=c;
    }
    sort(part,part+n,comp1);
    sort(actor,actor+m,comp2);
    bool flag=true;
    int x=0;
    SP.insert(make_pair(1756942789,0));
    for(int i=0;i<n;i++)
    {
        while(x<m&&actor[i].l<=part[i].l)
        {
            SP.insert(make_pair(actor[x].r,actor[x].id));
            x++; 
        }
        P temp=*(SP.lower_bound(make_pair(part[i].r,0)));
        if(temp.first==1756942789)
        {flag=false;
        break;
        }
        answer[part[i].id]=temp.second;
        actor[temp.second].k--;
        if(actor[temp.second].k==0)SP.erase(temp);
    }
    if(flag==false)cout<<"NO"<<endl;
    else
    {
        cout<<"YES"<<endl;
        for(int i=0;i<n;i++)cout<<answer[i]+1<<" ";
        
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41932243/article/details/81088160