站外题求助(悬关)
  • 板块题目总版
  • 楼主Wildchesse
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/4/15 14:55
  • 上次更新2023/10/23 18:25:46
查看原帖
站外题求助(悬关)
362022
Wildchesse楼主2023/4/15 14:55

https://iai.sh.cn/problem/639

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define MAXN 300005
using namespace std;
struct rect{
	int s,t,h,num;
	bool operator<(const rect&x)const{
		return h<x.h;
	}
}a[MAXN];
int n,ans;
priority_queue<rect> q;
priority_queue<rect> d;
bool cmp(rect a,rect b){
	return a.s<b.s;
}
struct line{
	int pos,ha=-1,di=-1;
}l[MAXN*2];
bool cmpl(line a,line b){
	return a.pos<b.pos;
}
signed main(){
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1,j=1;i<=n;i++,j+=2){
		cin>>a[i].s>>a[i].t>>a[i].h;
		a[i].num=i;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1,j=1;i<=n;i++,j+=2){
		l[j].pos=a[i].s;
		l[j+1].pos=a[i].t;
		l[j].ha=i;
		l[j+1].di=i;
	}
	sort(l+1,l+2*n+1,cmpl);
//	l[2*n+1].pos=l[2*n].pos;
	for(int i=1;i<n*2;i++){
		if(l[i].ha!=-1){
			q.push(a[l[i].ha]);
		}
		else if(l[i].di!=-1){
			d.push(a[l[i].di]);
		}
		while((!d.empty() and !q.empty())and d.top().num==q.top().num){
			q.pop();
			d.pop();
		}
		if(q.empty()){
			continue;
		}
		ans+=(l[i+1].pos-l[i].pos)*q.top().h;
	}
	cout<<ans;
	return 0;
}

样例过了,如果有人能知道哪里有漏洞的话可以告诉我,举反例也好

2023/4/15 14:55
加载中...