説明
日焼けしながら、見苦しい火傷を避けるために、それぞれの C (1≤ C 、彼らはビーチにいるとき≤2500)牛は日焼け止めと彼女の皮をカバーしなければなりません。牛は 私が 最小と最大の持っている SPFの 評価(1≤ minSPF 私は 、1,000≤ minSPFは私が ≤ maxSPFを私が 動作する1,000≤)を。場合は SPFの 評価が低すぎる、牛は日焼けを受けます。場合 SPFの 評価が高すぎる、牛は全く日焼けしない........
牛はとのピクニックバスケット持つ L (1≤ L 、各ボトルを2500≤)日焼け止めローションのボトルを 私は して SPFの 評価 SPF I (1≤ SPF 私は 1,000≤します)。ローションボトルは、 私が カバーすることができます カバーI ローションで牛を。牛は、唯一のボトルからローションがあります。
利用できるローションを与え日焼けしながら、自分自身を守ることができます牛の最大数は何ですか?
入力
* 1行目:二スペースで区切られた整数: C と L
*ライン2 ... C +1:ラインは 私は 牛を説明し 、私:ローションは二つの整数で必要となるの minSPF 私 と maxSPF 私は
*行 C 2 ... C + L 1:ライン 私は + C 1は、日焼け止めローションのボトルを説明し 、私は スペースで区切られた整数で: SPFは私 と カバーI
出力
日焼けしながら保護することができる牛の最大数である整数を持つ単一ライン
サンプル入力
3 2 3 10 2 5 1 5 6 2 4 1
サンプル出力
2
ACコードのコピー。
書式#include <iostreamの>
の#include <cstdioを>
する#include <キュー>
の#include <アルゴリズム>
std名前空間を使用しました。
int型CMP(対<整数、整数> A、対<整数、整数> B){
IF(a.first == b.first)戻りa.second <b.second。
他の<a.first b.firstを返します。
}
int型のmain(){
int型C、L。
CIN >> C >> L;
対<整数、整数> VA、[2510] C [2510]。
以下のために(INT i = 0; iはCを<; I ++)は
scanf関数を( "%d個の%のD"、&C [i]が1次回、&C [i]の.second)。
(INT J = 0; J <L; J ++)のため
のscanf( "%D%dの"、およびVA [j]が1次回、&VA [J] .second)。
PRIORITY_QUEUE <int型、ベクトル<整数>、大きい<整数>> Q;
ソート(C、C + C、CMP)。
ソート(VA、VA + L、CMP)。
INT K = 0、和= 0。
一方、(K <C && C [k]は1次回<= VA [i]が1次回){
q.push(C [K] .second)。K ++;
}
ながら(!q.empty()&& VA [i]は.second)
{
int型、M = q.top()。
q.pop();
IF(M> = VA [i]が1次回)和++、VA [i]は.second--。
}
}
のprintf( "%dの"、合計)。
0を返します。
}
アイデア:小さなから大規模なソートするデータの2つのアレイ、
日焼け止めは、日焼け止め最大優先度キューに配置された太陽牛に沿って最小、最小全て度の値以下に列挙する。それは、これらの最大値から取り出すことができるように、次に優先度のキューを最小限に小さい値です。答えを更新します。
全体的なアイデア:サンスクリーン(大、小)は、将来のアイドルを防止するために、最小の牛の第1の最大値は、他の日焼け止めに供給されなければなりません。