博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019牛客多校(第十场)F Popping Balloons —— 线段树+枚举
阅读量:5291 次
发布时间:2019-06-14

本文共 1202 字,大约阅读时间需要 4 分钟。

https://ac.nowcoder.com/acm/contest/890/F

题意:二维平面中有n个气球,你可以横着社三法子弹,竖着射三发子弹,且横着子弹的关系是y,y+r,y+2*r,竖着是x,x+r,x+2*r。问你怎么射才能射爆最多的气球。

分析:(代码注释)

#include
using namespace std;#define pb push_back#define lson root<<1,l,midd#define rson root<<1|1,midd+1,rconst int M=3e5+5;int n,m;vector
mp[M];int tree[M<<2];void up(int root){ tree[root]=max(tree[root<<1],tree[root<<1|1]);}void update(int pos,int val,int root,int l,int r){ if(l==r){ tree[root]+=val; return ; } int midd=(l+r)>>1; if(pos<=midd) update(pos,val,lson); else update(pos,val,rson); up(root);}void change(int pos,int val){ update(pos,val,1,1,1e5+1); if(pos-m>=1) update(pos-m,val,1,1,1e5+1); if(pos-2*m>=1) update(pos-2*m,val,1,1,1e5+1);}int main(){ scanf("%d%d",&n,&m); int ans=0; for(int i=1;i<=n;i++){ int x,y; scanf("%d%d",&x,&y); x++,y++; mp[x].pb(y); change(y,1); } for(int i=1;i<=1e5+1;i++){ ///三行贡献 int hang=mp[i].size()+mp[i+m].size()+mp[i+2*m].size(); ///求去掉三行后的三列最大贡献 for(int j=0;j
View Code

 

转载于:https://www.cnblogs.com/starve/p/11376979.html

你可能感兴趣的文章
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
统计单词,字符,和行
查看>>
《Akka应用模式:分布式应用程序设计实践指南》读书笔记8
查看>>
jQuery垂直滑动切换焦点图
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
模运算
查看>>
python多线程的使用
查看>>
团队编程项目作业1-成员简介及分工
查看>>
使用Chrome(PC)调试移动设备上的网页
查看>>
UI基础--手写代码实现汤姆猫动画
查看>>
使用gitbash来链接mysql
查看>>
黑盒测试和百合测试的优缺点对比
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
右侧导航栏(动态添加数据到list)
查看>>
81、iOS本地推送与远程推送详解
查看>>
C#基础_注释和VS常用快捷键(一)
查看>>
虚拟DOM
查看>>
uva 11468 Substring
查看>>