2020牛客寒假算法基础集训营4 I 匹配星星
https://ac.nowcoder.com/acm/contest/3005/I
又做麻烦了,悲催。。。
将所有星星按x坐标为第一关键字,z为第二关键字排好序
那么一个z=1的星星匹配的是x比它小的,y比他小但又尽可能大的星星
用线段树维护所有的y坐标
如果z=0,直接把y坐标插入线段树
如果z=1,在线段树中找小于它的y坐标,y又最大的那个星星,线段树中删走
题解直接用的set,而且在x相同时先处理z=1再处理z=0更方便。唉。。。
#include<cstdio>
#include<algorithm> using namespace std; #define N 100002 struct node
{
int x,y;
}e0[N],e1[N]; int m,has[N];
int sum[N<<],tot; bool cmp(node p,node q)
{
return p.x<q.x;
} void change(int k,int l,int r,int pos,int x)
{
sum[k]+=x;
if(l==r) return;
int mid=l+r>>;
if(pos<=mid) change(k<<,l,mid,pos,x);
else change(k<<|,mid+,r,pos,x);
} void query2(int k,int l,int r,int opl,int opr)
{
if(l>=opl && r<=opr)
{
tot+=sum[k];
return;
}
int mid=l+r>>;
if(opl<=mid) query2(k<<,l,mid,opl,opr);
if(opr>mid) query2(k<<|,mid+,r,opl,opr);
} int query(int k,int l,int r,int pos)
{
if(l==r)
if(sum[k]) return l;
else return ;
int mid=l+r>>;
tot=;
query2(,,m,mid+,pos);
if(tot) return query(k<<|,mid+,r,pos);
return query(k<<,l,mid,pos);
} int main()
{
int n,x,y,z,n0=,n1=;
scanf("%d",&n);
for(int i=;i<=n;++i)
{
scanf("%d%d%d",&x,&y,&z);
if(z) e1[++n1].x=x,e1[n1].y=y;
else e0[++n0].x=x,e0[n0].y=y;
has[i]=y;
}
sort(has+,has+n+);
m=unique(has+,has+n+)-has-;
sort(e0+,e0+n0+,cmp);
sort(e1+,e1+n1+,cmp);
e0[n0+].x=1e9+;
int now0=,now1=,i,mx,ans=;
while(now1<=n1 && e1[now1].x<=e0[].x) now1++;
while(now0<=n0)
{
for(i=now0;i<=n0 && e0[i].x==e0[now0].x;++i) change(,,m,lower_bound(has+,has+m+,e0[i].y)-has,);
while(now1<=n1 && e1[now1].x<=e0[now0+].x)
{
mx=query(,,m,lower_bound(has+,has+m+,e1[now1].y)-has-);
if(mx) change(,,m,mx,-),ans++;
now1++;
}
now0=i;
}
printf("%d",ans);
return ;
}
2020牛客寒假算法基础集训营4 I 匹配星星的更多相关文章
- 2020牛客寒假算法基础集训营2 J题可以回顾回顾
2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...
- 2020牛客寒假算法基础集训营1 J题可以回顾回顾
2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的, ...
- 2020牛客寒假算法基础集训营4-F树上博弈
链接:https://ac.nowcoder.com/acm/contest/3005/F来源:牛客网 题目描述 现有一个 n 个点,n-1条边组成的树,其中 1 号点为根节点. 牛牛和牛妹在树上玩游 ...
- 2020牛客寒假算法基础集训营4-I 匹配星星【贪心】
链接:https://ac.nowcoder.com/acm/contest/3005/I来源:牛客网 示例1 输入 复制 2 1 1 0 2 2 1 2 1 1 0 2 2 1 输出 复制 1 1 ...
- 2020牛客寒假算法基础集训营1 F-maki和tree
链接:https://ac.nowcoder.com/acm/contest/3002/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 2020牛客寒假算法基础集训营5 G街机争霸
题目描述 哎,又是银首,要是你这个签到题少WA一发就金了 牛牛战队的队员打完比赛以后又到了日常甩锅的时间.他们心情悲伤,吃完晚饭以后,大家相约到一个街机厅去solo.牛牛和牛能进入了一个迷宫,这个迷宫 ...
- 2020牛客寒假算法基础集训营4 D:子段异或
D : 子段异或 考察点 : 位运算,前缀和,异或的性质和应用 坑点 : 0 - L 的异或值是 0 的话也是一个区间 相同的值可能有多个,那么这时候区间就会有多个(x * (x + 1) / 2) ...
- 2020牛客寒假算法基础集训营6 I.导航系统 (最小生成树)
https://ac.nowcoder.com/acm/contest/3007/I 题中给定的图必定是一棵树 容易发现,如果将输入的N(N-1)个距离看做N(N-1)条无向边的话,那么如果数据合法, ...
- 2020牛客寒假算法基础集训营5 G.街机争霸 (bfs)
https://ac.nowcoder.com/acm/problem/201961 预处理出僵尸走的路径,僵尸走的周期长度应该为2k-2,在普通的bfs基础上加上一维表示时间,从当前位置x,y和和时 ...
随机推荐
- 孤荷凌寒自学python第103天认识区块链017
[主要内容] 今天继续分析从github上获取的开源代码怎么实现简单区块链的入门知识,共用时间25分钟. (此外整理作笔记花费了约34分钟) 详细学习过程见文末学习过程屏幕录像. 今天所作的工作是进一 ...
- 第2节 Scala中面向对象编程:9、getClass和classOf;10、调用父类的constructor;11、抽象类和抽象字段;
6.3.4. Scala中getClass 和 classOf Class A extends class B B b=new A b.getClass ==classOf[A] B b ...
- 关于Android Studio中点9图的编译错误问题
Android中的点9图想必大家都非常熟悉了,能够指定背景图片的缩放区域和文本内容的显示区域,常见如QQ聊天界面的背景气泡这种文本内容不固定并需要适配的应用场景. 这里也给大家准备了一张图,详细介绍了 ...
- linux中cp指令前面加反斜杠
在cp指令前面加反斜杠可以不弹出是否覆盖的询问而直接覆盖! 如:cp /app/WEB-INF/com/cfg.properties /app_bak/WEB-INF/com/cfg.properti ...
- MySQL数据库索引:索引介绍和使用原则
本篇目录: 一.数据页与索引页 二.聚簇索引与非聚簇索引 三.唯一索引 四.索引的创建 五.索引的使用规则 六.数据库索引失效情况 本篇正文: 一.数据页与索引页 数据库的表存储分为数据页存储和索引页 ...
- 解题报告:luogu P1196 [NOI2002]银河英雄传说
由于并查集让我很自闭(其实是我太弱了),所以学习了加权并查集,这是例题: 题目链接:P1196 [NOI2002]银河英雄传说 不是很简单,但对于大佬还是签到题. 合并与路径压缩时直接维护\(dis[ ...
- 手搓SSM
相关资料,网上的资料很多,但是文章看不懂,看别人写好的代码比较好理解 ssm-example mysssm 整个流程和原理 一个入口类,入口类需要在tomcat启动的时候执行 通过扫描文件加把文件取出 ...
- Python开发之Anconda环境搭建
Python的强大之处在于它的应用范围广泛,遍及人工智能.科学计算.web开发.系统运维.大数据及云计算等,实现其强大功能的前提,就是Python具有数量庞大且功能相对完善的标准库和第三方库.通过对库 ...
- kill和raise
kill向特定的进程和进程组发送信号 raise向进程自身发送信号
- APP原型的设计步骤是什么?
当我们开始设计一款APP的原型时,应该遵从的设计步骤是什么?总结一下自己首次设计APP的思路步骤,以期自己对原型的设计认知能更规范化.流程化. 一.定框架 一款APP应该有固定的上导航.下导航和尺寸大 ...