10pts求助
查看原帖
10pts求助
361592
histcat楼主2023/9/10 21:27
#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

2023/9/10 21:27
加载中...