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和和时 ...
随机推荐
- redhat 7.6 用户和组
用户 useradd user1 //新建用户user1 userdel user1 //删除用户user1 userdel -r user1 //删除用户并且删除h ...
- cmd如何进入和退出Python编程环境?
cmd里面进入python编译环境的方式: 安装Python之后需直接运行: python 即可进入Python开发环境 退出Python编译环境主要有三种方式: 1:输入exit(),回车 2:输入 ...
- JuJu Beta Postmortem
JuJu demo demo 项目github地址 JuJu 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 完成基于Julia语言的NER mod ...
- php 实现店铺装修2
<?php namespace Webapp\Model; use Common\Model\DataModel\FlagShopCategoryModel; use Common\Model\ ...
- IDEA代码检验出错
该软件功能过于强大,会自动检验执行所需要的代码,所以会报错,但实际上我们有写 例如 解决方法 File-->setting 将error改为warning
- Lamda简单使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 无线渗透--wifiphisher之wifi钓鱼获取wifi密码
本来是想试验一下暴力破解的,但是由于字典太大,跑的时间也比较长,于是使用了钓鱼的方法. 先说一下wifiphisher钓鱼获取wifi密码的原理: wifiphisher对于你在攻击中选定的wifi会 ...
- Jquery属性操作、添加类
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- APP自动化测试获取包名的两种方法
获取包名的两种方法: 一.通过aapt获取 1.进入aapt.exe所在路径 2.在地址栏输入cmd回车,打开dos命令窗口. 3.在命令窗口输入 aapt dump badging 拖入apk 回车 ...
- NO31 配置网卡--主机名--网络故障排查面试题--DNS
修改网卡配置信息: 修改主机名规范的三个步骤: 配置默认网关: DNS解析过程,用命令看: DNS相关命令: 口述DNS解析过程: 客户端(电脑)通过浏览器输入域名,先找hosts文件及本地dns缓 ...