尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【题解】P11453 [USACO24DEC] Deforestation S

【题解】P11453 [USACO24DEC] Deforestation S
📅 发布时间:2026/6/18 19:04:51

题意

数轴上有 \(n\) 个整点,求最多删除多少个整点,使得 \(k\) 个条件依然满足。每个条件形如:在 \([l_i,r_i]\) 范围内至少存在 \(t_i\) 个整点。

思路

删点操作有悖于满足条件的逻辑,因此正难则反,考虑最少保留多少个点使得所有条件被满足。为了使点数最少,应使每个点贡献的区间尽可能多,不难想到贪心求解,对所有条件的区间按右端点从小到大排序,从右端点往左取点直至满足条件,并更新覆盖这些点的其他区间还需要取的点数。

动态维护区间信息,考虑使用线段树。因值域到达 \(\pm 10^9\),而区间覆盖又只考虑坐标的大小关系,所以先对坐标离散化。线段树要维护两个信息:该区间已选的点数和该区间最靠右的点。按右端点从小到大枚举每个条件,在该区间中找最靠右的点然后将其删掉,循环往复直至满足要求,继续求解下一条件。最终答案即为总点数 \(n\) 减去取得的点数。

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int T,n,k;
int pos[N];
struct Law{int l,r,t;
}lmt[N];
struct Node{int cnt,uns;int l,r;
};
struct Segtr{Node tr[4*N];void push_up(int p){tr[p].cnt=tr[2*p].cnt+tr[2*p+1].cnt;tr[p].uns=max(tr[2*p].uns,tr[2*p+1].uns);}void build(int p,int l,int r){tr[p].l=l,tr[p].r=r;if(l==r){tr[p].cnt=0,tr[p].uns=l;return ;}int mid=(l+r)>>1;build(2*p,l,mid);build(2*p+1,mid+1,r);push_up(p);}void update(int p,int l,int r,int k){if(l==r){tr[p].cnt=1,tr[p].uns=0;return ;}int mid=(l+r)>>1;if(k<=mid) update(2*p,l,mid,k);else update(2*p+1,mid+1,r,k);push_up(p);}Node query(int p,int l,int r){Node val={0,0};if(l<=tr[p].l&&tr[p].r<=r) return tr[p];int mid=(tr[p].l+tr[p].r)>>1;if(l<=mid){Node q=query(2*p,l,r);val.cnt+=q.cnt;val.uns=max(val.uns,q.uns);}if(r>mid){Node q=query(2*p+1,l,r);val.cnt+=q.cnt;val.uns=max(val.uns,q.uns);}return val;}
}seg;
bool cmp(Law x,Law y){return x.r<y.r;
}
int main(){scanf("%d",&T);while(T--){scanf("%d%d",&n,&k);for(int i=1;i<=n;i++) scanf("%d",&pos[i]);sort(pos+1,pos+1+n);for(int i=1;i<=k;i++) scanf("%d%d%d",&lmt[i].l,&lmt[i].r,&lmt[i].t);sort(lmt+1,lmt+1+k,cmp);for(int i=1;i<=k;i++){if(!lmt[i].t) lmt[i].l=lmt[i].r=1,lmt[i].t=0;else{lmt[i].l=(lower_bound(pos+1,pos+1+n,lmt[i].l)-pos);lmt[i].r=(upper_bound(pos+1,pos+1+n,lmt[i].r)-pos)-1;}}seg.build(1,1,n);for(int i=1;i<=k;i++){Node ans=seg.query(1,lmt[i].l,lmt[i].r);while(ans.cnt<lmt[i].t){seg.update(1,1,n,ans.uns);ans=seg.query(1,lmt[i].l,lmt[i].r);}}printf("%d\n",n-seg.query(1,1,n).cnt);}return 0;
}

时间复杂度 \(O(n\log n)\)。

相关新闻

  • 【dl】【WSL2】如何获得“Winux”?Windows 上的 Linux 子系统 —— 比虚拟机更好的选择
  • CSS3动画:2D/3D转换全解析
  • P2014 [CTSC1997] 选课

最新新闻

  • 2026海口包包回收价格差距大,内行教你看懂行情 - 奢品小当家
  • 2026成都黄金出手干货:实时金价参考、称重核验、无损检测全教程 - 奢侈品回收评测
  • 163MusicLyrics:网易云QQ音乐歌词快速获取完整解决方案
  • GitHub Desktop中文汉化终极指南:5分钟快速上手,告别英文界面困扰
  • 寄快递怎么最省钱?2026各快递品牌低价寄件方法全汇总 - 快递物流资讯
  • 2026安徽酒店全套设备回收专业技术测评报告 - 安徽工业

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号