積む+欲張る——nkoj 1587【Usaco Nov 07 Gold】日焼け止めクリームを配る


【Usaco Nov 07 Gold】日焼け止めを配る
Description
乳牛たちはビーチに行って日光浴を楽しむ計画だ.皮膚が日焼けしないように、すべてのC(1<=C<=2500)頭の乳牛は出かける前に日焼け止めクリームを塗らなければならない.第i頭乳牛に適した最小と最大のSPF値はそれぞれminSPF_iとmaxSPF_i(1 <= minSPF_i <= 1,000; minSPF_i <= maxSPF_i <= 1,000).もしある乳牛が塗った日焼け止めクリームのSPF値が小さすぎると、日光は依然として彼女の皮膚を灼傷することができます.日焼け止めのSPF値が大きすぎると、日光浴は部屋に横になって寝るのとほとんど変わらないようになります.そのため、乳牛たちは大きなかごの日焼け止めクリームを用意し、全部でL(1<=L<=2500)瓶を用意した.第i瓶の日焼け止めクリームのSPF値はSPF_ですi(1 <= SPF_i <= 1,000).瓶の大きさも必ずしも同じではありません.i本目の日焼け止めクリームはcover_i頭乳牛使用.もちろん、乳牛は1つの瓶の中の日焼け止めクリームを塗るしかなく、いくつかの瓶の中の混合を使うことはできません.乳牛たちが用意した日焼け止めクリームを使えば、どれだけの乳牛が灼傷を受けずに日光浴を楽しむことができるか計算してください.
Input
*1行目:スペースで区切られた2つの整数:CとL*2.C+1行:i+1行目i頭乳牛に適したSPF値の範囲:minSPF_iおよびmaxSPF_i*C+2..C+L+1行目:i+C+1行目i瓶目日焼け止めクリームのパラメータ:SPF_iとcover_i,2つの数の間をスペースで区切る.
Output
*1行目:1つの整数を出力し、最大何頭の乳牛が日光浴を楽しむことができるかを示します.
Sample Input
3 2
3 10
2 5
1 5
6 2
4 1

Sample Output
2

Hint
全部で乳牛が3頭、日焼け止めクリームが2本あります.3頭の乳牛が適応するSPF値はそれぞれ3.10,2..5,および1..5.2本の日焼け止めクリームのSPF値はそれぞれ6(2回使用可能)と4(1回使用可能)であった.可能な配分案は、乳牛1は1本目の日焼け止めクリーム、乳牛2または乳牛3は2本目の日焼け止めクリームを使用する.明らかに、最大2頭の乳牛の需要しか満たされていない.
#include
#include
#include
#include
#include
using namespace std;
struct node
{
	int x;
	int y;
};
bool compare(node a,node b)//             ,              
{
	if(a.x==b.x)return a.y,greater >q;
int main(){
	int c,l,i,j,k,ans=0;
	cin>>c>>l;
	for(i=1;i<=c;i++)
	{
		scanf("%d%d",&cow[i].x,&cow[i].y);
	}
	for(i=1;i<=l;i++)
	{
		scanf("%d%d",&spf[i].x,&spf[i].y);
	}
	sort(cow+1,cow+1+c,compare);
	sort(spf+1,spf+1+l,compare);
	int x=1,temp;
	for(i=1;i<=l;i++)
	{
		while(cow[x].x<=spf[i].x&&x<=c)//                
		{
			q.push(cow[x].y);
			x++;
		}
		while(spf[i].y>0&&q.size())
		{
			temp=q.top();
			if(temp>=spf[i].x)//  cow.y         ,             
			{
				ans++;
				spf[i].y--;
			}//      y     ,                    y,                
			q.pop();
		}
	}
	cout<