#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;
}
cf497C
猜你喜欢
转载自blog.csdn.net/qq_41932243/article/details/81088160
今日推荐
周排行