专栏文章
题解:P11512 [ROIR 2017 Day 2] 力场
P11512题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqkt4ca
- 此快照首次捕获于
- 2025/12/04 06:26 3 个月前
- 此快照最后确认于
- 2025/12/04 06:26 3 个月前
外话
比赛时思考许久,赛后一看,求的是面积交,不是面积并,同时一百分。
正题
1.性质
观察样例可以发现,面积并实际上是。
2.思路
根据这个性质,我们可以将从大到小排序,以此枚举。这时,只有的矩形才能选,然后在这些矩形中选前大的(此时的就是第大的)。这时问题已经转化为动态维护第大。
3.维护方法
用一个小根堆,先将前个数插进去,插入一个数时直接进小根堆,再把此时的最小值删去,这时的堆顶就是第小。
4.代码
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=200005;
struct node{
int x,y;
} a[N];
bool cmp(node a,node b){
return a.x>b.x;
}
priority_queue<int,vector<int>,greater<int> > q;
signed main(){
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=k;i++) q.push(a[i].y);//前k个数入堆
int ans=a[k].x*q.top();
for(int i=k+1;i<=n;i++){//枚举min(xi)
q.push(a[i].y);
q.pop();
ans=max(ans,a[i].x*q.top());//累计答案
}
cout<<ans;
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...