#include<bits/stdc++.h>
using namespace std;
const int M = 1e5 + 10;
struct Time
{
int a, b;
bool operator < (const Time o) const
{
return a < o.a;
}
};
priority_queue <pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > QWQ1;//第一维为时间,第二位为第几个廊桥
priority_queue <pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > QWQ2;
Time nation[M], internation[M];
int n, m1, m2;
int res1[M], res2[M], cur1 = 1, cur2 = 1;
int main()
{
freopen("in.in", "r", stdin);
freopen("out.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m1 >> m2;
for(int i = 1;i <= m1;i++)
{
cin >> nation[i].a >> nation[i].b;
}
for(int i = 1;i <= m2;i++)
{
cin >> internation[i].a >> internation[i].b;
}
sort(nation + 1, nation + 1 + m1);
sort(internation + 1, internation + 1 + m2);
QWQ1.push(make_pair(0, 1));
for(int i = 1;i <= m1;i++)
{
pair<int, int> t = QWQ1.top();
// cout << t.first << " " << t.second << endl;
QWQ1.pop();
if(t.first > nation[i].a)
{
cur1 ++;
QWQ1.push(make_pair(t.first, t.second));
QWQ1.push(make_pair(nation[i].b, cur1));
res1[cur1]++;
// cout << "创建新的:" << nation[i].b<<" " <<cur1 << endl;
}
else
{
res1[t.second] ++;
QWQ1.push(make_pair(nation[i].b, t.second));
// cout << "用旧的的:" << nation[i].b<<" " << t.second << endl;
}
}
for(int i = 1;i <= cur1;i++)
{
cout << res1[i] << " ";
res1[i] += res1[i - 1];
}
cout << endl;
QWQ2.push(make_pair(0, 1));
for(int i = 1;i <= m2;i++)
{
pair<int, int> t = QWQ2.top();
// cout <<"debug:" << t.first << " " << t.second << endl;
QWQ2.pop();
if(t.first > internation[i].a)
{
cur2 ++;
QWQ2.push(make_pair(t.first, t.second));
QWQ2.push(make_pair(internation[i].b, cur2));
res2[cur2]++;
// cout << "创建新的:(结束时间和第几个栈)" << internation[i].b<<" " <<cur2 << endl;
}
else
{
res2[t.second] ++;
QWQ2.push(make_pair(internation[i].b, t.second));
// cout << "用旧的的:(结束时间和第几个栈)" << internation[i].b<<" " << t.second << endl;
}
}
// for(int i = 1;i <= cur1;i++)
// {
// cout << res1[i] << " ";
// }
for(int i = 1;i <= cur2;i++)
{
res2[i] += res2[i - 1];
}
cout << endl;
int ans = -0x3f3f3f3f;
for(int i = 0;i <= n;i++)
{
ans = max(ans, res1[i] + res2[n - i]);
}
cout << ans;
return 0;
}
Hack数据
2 5 10
36 275
131 223
222 308
40 60
50 70
61 80
71 90
81 100
167 240
101 120
166 220
46 194
130 150
186 243
153 170
应该输出 7
实际输出 5