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 匹配星星的更多相关文章

  1. 2020牛客寒假算法基础集训营2 J题可以回顾回顾

    2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...

  2. 2020牛客寒假算法基础集训营1 J题可以回顾回顾

    2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的, ...

  3. 2020牛客寒假算法基础集训营4-F树上博弈

    链接:https://ac.nowcoder.com/acm/contest/3005/F来源:牛客网 题目描述 现有一个 n 个点,n-1条边组成的树,其中 1 号点为根节点. 牛牛和牛妹在树上玩游 ...

  4. 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 ...

  5. 2020牛客寒假算法基础集训营1 F-maki和tree

    链接:https://ac.nowcoder.com/acm/contest/3002/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  6. 2020牛客寒假算法基础集训营5 G街机争霸

    题目描述 哎,又是银首,要是你这个签到题少WA一发就金了 牛牛战队的队员打完比赛以后又到了日常甩锅的时间.他们心情悲伤,吃完晚饭以后,大家相约到一个街机厅去solo.牛牛和牛能进入了一个迷宫,这个迷宫 ...

  7. 2020牛客寒假算法基础集训营4 D:子段异或

    D : 子段异或 考察点 : 位运算,前缀和,异或的性质和应用 坑点 : 0 - L 的异或值是 0 的话也是一个区间 相同的值可能有多个,那么这时候区间就会有多个(x * (x + 1) / 2) ...

  8. 2020牛客寒假算法基础集训营6 I.导航系统 (最小生成树)

    https://ac.nowcoder.com/acm/contest/3007/I 题中给定的图必定是一棵树 容易发现,如果将输入的N(N-1)个距离看做N(N-1)条无向边的话,那么如果数据合法, ...

  9. 2020牛客寒假算法基础集训营5 G.街机争霸 (bfs)

    https://ac.nowcoder.com/acm/problem/201961 预处理出僵尸走的路径,僵尸走的周期长度应该为2k-2,在普通的bfs基础上加上一维表示时间,从当前位置x,y和和时 ...

随机推荐

  1. 【剑指Offer面试编程题】 题目1350:二叉树的深度--九度OJ

    题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 输入: 第一行输入有n,n表示结点数,结点号从1到n.根结点为1. ...

  2. 第1节 Scala基础语法:13、list集合的定义和操作;16、set集合;17、map集合

    list.+:5 , list.::5: 在list集合头部添加单个元素5 : li1.:+(5):在list集合尾部添加单个元素5: li1++li2,li1:::li2:在li1集合尾部添加il2 ...

  3. Atcoder Grand Contest 037B(DP,组合数学,思维)

    #include<bits/stdc++.h>using namespace std;const long long mod = 998244353;string s;int a[3000 ...

  4. centos7一步一步搭建docker jenkins 及自定义访问路径重点讲解

    系统环境:centos7.7 (VMware中) 镜像image 版本:jenkins/jenkins (截止2020.01.10最新版) 参考文章:https://www.jianshu.com/p ...

  5. redhat 7.6 密码破解(无光盘)

    开机,在下面界面按e 找到linux16  在最尾输入 rd.break 按 Ctrl+x 输入 mount -o remount,rw /sysroot 输入chroot   /sysroot sh ...

  6. Python—数据类型之集合(Set)

    1.集合是一个无序的,且不重复元素的集合.它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的. 2.基本功能包括关系测试和消除重复元素.注意:集合存在的意义就是去 ...

  7. Xcode10升级问题:Multiple commands produce Info.plist

    升级到Xcode10以后,编译过程遇到的第一个问题就是类似于这样的: Multiple commands produce '/Users/jiaxiaoyan/Library/Developer/Xc ...

  8. OC中NSLog函数输出格式罗列

    格式 类型 格式 类型 格式 类型 %@ 对象 %d,%i 整数 %u 无符整数 %f 浮点 %x,%X 二进制整数 %o 八进制整数 %zu size_t %p 指针 %e 浮点(科学计算) %g ...

  9. iOS收起键盘

    在UIViewController中收起键盘,有四种代码方式: 1.让相应的控件放弃第一响应者 /** 放弃第一响应者 */ [self.nameTextField resignFirstRespon ...

  10. Android 用ViewFlipper实现跑马灯效果的公告提示

    1.代码部分private void initViewFlipper(final HomepageListModel.Notice notice) { for (int i = 0; i < n ...