简单模拟题 5pts 求调 玄关 码风良好
  • 板块灌水区
  • 楼主a_little_carrot
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/19 22:06
  • 上次更新2024/10/20 06:50:23
查看原帖
简单模拟题 5pts 求调 玄关 码风良好
1042960
a_little_carrot楼主2024/10/19 22:06

Link

#include "bits/stdc++.h"
using namespace std ;
const int N = 100005 ;
struct Node {int t, n ;} ;
bool cmp(Node a, Node b) {return a.t < b.t ? 1 : a.n < b.n ;}
int n, m1, m2, ans, ans1, ans2, sum1[N], sum2[N] ;
Node a[N] ;
int b[N], cnt1, cnt2 ;
priority_queue<int, vector<int>, greater<int> > q1, q2 ;
void solve()
{
	for(int i = 1 ; i <= m1 + m2 ; ++i)
	{
		priority_queue<int, vector<int>, greater<int> > *th ;
		int *cnt, *sum ;
		if(a[i].n <= m1) th = &q1, cnt = &cnt1, sum = sum1 ;
		else th = &q2, cnt = &cnt2, cnt = &cnt2, sum = sum2 ;
		while(!th->empty() && th->top() <= a[i].t) th->pop(), *cnt = *cnt - 1 ;
		th->push(b[a[i].n]) ;
		*cnt = *cnt + 1 ;
		sum[*cnt] = max(sum[*cnt], (int)th->size()) ;
	}
}
int main()
{
//	freopen("airport.in","r",stdin) ;
//	freopen("airport.out","w",stdout) ;
	ios::sync_with_stdio(false) ;
	cin.tie(0) ; cout.tie(0) ;
	cin >> n >> m1 >> m2 ;
	for(int i = 1 ; i <= m1 + m2 ; ++i)
	{
		cin >> a[i].t >> b[i] ;
		a[i].n = i ;
	}
	sort(a + 1, a + m1 + m2, cmp) ;
	solve() ;
	for(int i = 1 ; i <= n ; ++i) sum1[i] += sum1[i - 1] ;
	for(int i = n ; i >= 1 ; --i) sum2[i] += sum2[i + 1] ;
	for(int i = 1 ; i <= n ; ++i)
	{
		ans = max(ans, sum1[i] + sum2[n - i]) ;
	}
	cout << ans ;
	return 0 ;
}
2024/10/19 22:06
加载中...