空想没有收获,行动才有收获
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
typedef pair<int, int> P;
priority_queue<P> que;
// mint first,maxt second
queue<P> cows, tmp;
// val first,count second
P bos[2507];
int L, C, ans = 0;
void input()
{
scanf("%d%d", &C, &L);
int mint = 0, maxt = 0;
for (int i = 1; i <= C; i++)
{
scanf("%d%d", &mint, &maxt);
cows.push(P(mint, maxt));
}
for (int i = 1; i <= L; i++)
{
scanf("%d%d", &bos[i].first, &bos[i].second);
}
}
void preHandle()
{
ans = 0;
sort(bos + 1, bos + 1 + L);
}
void deal(int i)
{
while (!cows.empty())
{
P cow = cows.front();
cows.pop();
if (cow.first <= bos[i].first && cow.second >= bos[i].first)
{
que.push(cow);
}
else
{
tmp.push(cow);
}
}
for (int j = 1; j <= bos[i].second && !que.empty(); j++)
{
que.pop();
ans++;
}
while (!que.empty())
{
cows.push(que.top());
que.pop();
}
while (!tmp.empty())
{
cows.push(tmp.front());
tmp.pop();
}
}
void solve()
{
for (int i = L; i >= 1; i--)
{
while (!que.empty())
{
que.pop();
}
while (!tmp.empty())
{
tmp.pop();
}
deal(i);
}
}
int main()
{
input();
preHandle();
solve();
printf("%d\n", ans);
return 0;
}