poj2464 Brownie Points II 树状数组

【QT开发教程】Qt中的跨平台文件系统操作 文件系统操作是应用程序开发中经常需要处理的任务。Qt提供了一套跨平台的文件系统操作API,使开发者能够在不同操作系统上无缝地进行文件和目录操作。本文将介绍Qt中的跨平台文件系统操作,包括基本概念、常用类和方法以及实际示例。 阅读详情

Description

Stan and Ollie play the game of Odd Brownie Points. Some brownie points are located in the plane, at integer coordinates. Stan plays first and places a vertical line in the plane. The line must go through a brownie point and may cross many (with the same x-coordinate). Then Ollie places a horizontal line that must cross a brownie point already crossed by the vertical line.
Those lines divide the plane into four quadrants. The quadrant containing points with arbitrarily large positive coordinates is the top-right quadrant.

The players score according to the number of brownie points in the quadrants. If a brownie point is crossed by a line, it doesn't count. Stan gets a point for each (uncrossed) brownie point in the top-right and bottom-left quadrants. Ollie gets a point for each (uncrossed) brownie point in the top-left and bottom-right quadrants.

Stan and Ollie each try to maximize his own score. When Stan plays, he considers the responses, and chooses a line which maximizes his smallest-possible score.

Input

Input contains a number of test cases. The data of each test case appear on a sequence of input lines. The first line of each test case contains a positive odd integer 1 < n < 200000 which is the number of brownie points. Each of the following n lines contains two integers, the horizontal (x) and vertical (y) coordinates of a brownie point. No two brownie points occupy the same place. The input ends with a line containing 0 (instead of the n of a test).

Output

For each input test, print a line of output in the format shown below. The first number is the largest score which Stan can assure for himself. The remaining numbers are the possible (high) scores of Ollie, in increasing order.

Sample Input

11
3 2
3 3
3 4
3 6
2 -2
1 -3
0 0
-3 -3
-3 -2
-3 -4
3 -7
0

Sample Output

Stan: 7; Ollie: 2 3;

  一个平面有一些点,stan先竖着画一条线(必须经过一个点),ollie横着画一条线(必须经过stan画的线上的一个点),stan得分是一三象限的点数,ollie得分是二四象限的点数,在线上的不算。ollie要在自己得分最高的情况下让stan得分最少,输出stan得最低分最高的情况下的最低分,和stan得到这个分数时ollie的所有可能得分。

  参考了cxlove大神的,用两个树状数组表示竖线的左边和右边,对y离散化。一开始把所有点都加到右边的树状数组,竖线从左到右扫过去,每次把在竖线上的点从右边删除,算出在这条竖线上每个点画横线的情况a和b,更新答案:如果b比当前的ollie更大,把a和b都赋值成当前值,如果b等于当前ollie值,就把stan更新到min(stan,a)。这条线所有点更新完后的stan如果小于当前答案就把存ollie的vector清空,如果等于当前答案的话就把ollie存到vector里。

#include<iostream>
#include<queue>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<stack>
#include<algorithm>
#define INF 0x3f3f3f3f
#define eps 1e-9
#define MAXN 200010
#define MAXM 2000010
#define MAXNODE MAXN*4
#define MOD 999983
typedef long long LL;
using namespace std;
int N,l[MAXN],r[MAXN],y[MAXN];
vector<int> Ollie;
struct Point{
    int x,y;
    bool operator < (const Point& a) const{
        return x<a.x;
    }
}p[MAXN];
int lowbit(int x){
    return x&(-x);
}
void update(int *c,int i,int v){
    while(i<=N){
        c[i]+=v;
        i+=lowbit(i);
    }
}
int sum(int *c,int i){
    int ret=0;
    while(i>0){
        ret+=c[i];
        i-=lowbit(i);
    }
    return ret;
}
int main(){
    freopen("in.txt","r",stdin);
    while(scanf("%d",&N)!=EOF&&N){
        for(int i=0;i<N;i++){
            scanf("%d%d",&p[i].x,&p[i].y);
            y[i]=p[i].y;
        }
        sort(y,y+N);
        sort(p,p+N);
        int n=unique(y,y+N)-y;
        memset(l,0,sizeof(l));
        memset(r,0,sizeof(r));
        for(int i=0;i<N;i++) update(r,lower_bound(y,y+n,p[i].y)-y+1,1);
        int Stan=-1,e;
        Ollie.clear();
        for(int i=0;i<N;i++) if(!i||p[i].x!=p[i-1].x){
            update(r,lower_bound(y,y+n,p[i].y)-y+1,-1);
            e=i;
            for(int j=i+1;j<N&&p[j].x==p[j-1].x;j++){
                update(r,lower_bound(y,y+n,p[j].y)-y+1,-1);
                e=j;
            }
            int stan=INF,ollie=-1;
            for(int j=i;j<=e;j++){
                int pos=lower_bound(y,y+n,p[j].y)-y+1;
                int a=sum(l,pos-1)+sum(r,n)-sum(r,pos),b=sum(r,pos-1)+sum(l,n)-sum(l,pos);
                if(b==ollie) stan=min(stan,a);
                else if(b>ollie){
                    stan=a;
                    ollie=b;
                }
            }
            if(stan>Stan){
                Stan=stan;
                Ollie.clear();
            }
            if(stan==Stan) Ollie.push_back(ollie);
            for(int j=i;j<=e;j++) update(l,lower_bound(y,y+n,p[j].y)-y+1,1);
        }
        printf("Stan: %d; Ollie:",Stan);
        sort(Ollie.begin(),Ollie.end());
        n=unique(Ollie.begin(),Ollie.end())-Ollie.begin();
        for(int i=0;i<n;i++) printf(" %d",Ollie[i]);
        puts(";");
    }
    return 0;
}




YOLOv11涨点改进 | 检测头Head改进篇 | 利用DynamicConv高效动态卷积改进YOLOv11检测头,DyHead通过增强检测头操作,轻量化改进、提高模型目标检测的精度 本文提出了一种基于动态卷积(DynamicConv)的YOLOv11检测头改进方法v11Detect_DyHead。该方法通过引入多专家机制和动态权重调整,在增加参数量的同时保持较低计算复杂度,有效解决了低FLOPs模型难以从大规模预训练中获益的问题。文章详细介绍了DynamicConv模块的原理和实现,包括其参数高效特性、多专家机制和动态权重生成方式。同时提供了完整的代码实现和添加该模块的具体步骤,并给出了相应的YAML配置文件。实验表明,该方法在保持较低计算开销的同时显著提升了模型性能,适用于视觉和语言 阅读详情

相关推荐

瑞芯微rk3568移植openbmc(一)----关于ob移植的优缺点

基于rock3a的单板,CPU为瑞芯微rk3568的环境,移植了openbmc

feixiang3839的专栏 5535

poj2464 线段树扫描线

由于这几天刚好有事,这题目拖了好几天,今天总算静下心来搞定了。题目并不难,只是有点繁琐,而且要注意细节。 简要思路: 先把数据离散化,同时记录每一个X左右边有多少,X有多少,Y同理; 然后按先X再Y从小到大排序,再来扫描,用线段树记录区间里点的个数。 然后推出四个象限的点的个数,麻烦的事来了,坐标上的点怎么去掉,开了cntx,cnty记录每个X,Y坐标询问次数,然后就很简单了。 最后

丿Smilē 丶晨星灬 923

LD分析实战:基于Plink和R的连锁不平衡计算与可视化全流程

本文详细介绍了基于Plink和R的连锁不平衡(LD)分析全流程,包括基因型数据预处理、LD计算参数设置及结果可视化技巧。通过实战案例解析PLINK文件格式转换、r²值计算关键参数,并展示如何使用ggplot2绘制高质量LD热图,帮助研究人员高效完成基因组关联分析。

weixin_29074295的博客 319

POJ 2464 Brownie Points II(树状数组)

题目链接:http://poj.org/problem?id=2464 题意:平面上有n个点。Stan选一个点A画一条垂线经过A(x值与A相同的点也会被穿过),Ollie在这条垂线所穿过的点中选一个点B用一条水平线穿过它,这样把平面分到四个区域,Stan的得分为右上和左下的点的个数,Ollie为右下和左上的点的个数。Stan先画。Stan选点的策略是使得在Ollie画完后(Ollie可能有好多选...

weixin_34236869的博客 182

基于mediapipe的动作捕捉和人物模型的驱动

我实习做这个的时候,当时也找了很多资料,但很多资料都没有讲透,下面我就总结一下自己结合看代码后的感悟,还有一些我认为很重要的点。

qq_58484580的博客 7700

【Azure 架构师学习笔记】- Azure Private Endpoint

公有云的其中一个特点是默认允许公网访问, 这就对企业环境带来风险,也是很多年前企业对公有云抵触的其中一个原因,现在这类问题已经很少,因为有了很多技术来确保云上的资源被安全地访问。其中Private endpoint(PE)就起到了很重要的作用。云上的某个资源如VM会创建在特定的网络(VNet/Subnet)上, 而其他如Storage Account , Azure SQL等PaaS服务则没有。如果你需要用VM 来访问这些PaaS资源,VM 就会通过资源的公网IP 来访问。

MVP黄钊吉(發糞塗牆) 1786

【Poj】2464 (线段树)

题目:平面上有若干个点,stan过其中某个点划一条垂直x轴的线(可同时过多个点),ollie过stan画的线中的某个点,画一条垂直与y轴的线,这时候将平面分为4个区域,stan的得分为第一象限和第三象限的个数,olle反之。 现在题目的要求来了,有点绕:题目要求在stan画下的一条直线之后,ollie可以获得的最高分,stan获得一个分数x,最后x最大的时候,将ollie的分数输出。 思路就不

Jason 610

MAIXCAM无线连接实战:5分钟搞定远程调试与代码烧录(避坑版)

本文提供了一份详细的MAIXCAM无线连接实战指南,帮助嵌入式视觉开发者快速配置远程调试与代码烧录。文章重点介绍了通过MaixHub IDE进行Wi-Fi配置、建立远程终端连接、使用SFTP进行文件传输以及管理自启动应用程序的完整流程,并针对IP地址变动、信号中断等常见问题提供了实用的避坑解决方案,旨在提升开发效率与灵活性。

weixin_29188043的博客 296

poj 2464(离散化+BIT)

不得不说是一道比较烦人的题。。细节比较多 由于没给xy范围所以必须先离散化。。之后再开2个BIT,以y值为下标维护点的个数,在枚举x时,一个BIT维护x左边的点个数,另一个维护x右边的点,然后在枚举的时候主要按点对BIT进行维护,对每个点进行差分求方案,对每个x求得最优方案后还要记录方案来求oli的得分。。 然后记得输出oli得分要去重。。 #include #include

qkoqhh 364

Verilog中generate for循环的5个实战技巧(附完整代码示例)

本文详细介绍了Verilog中generate for循环的5个高级实战技巧,包括参数化模块实例化、条件化生成、多维硬件结构实现等,并附有完整代码示例。这些技巧能显著提升FPGA开发效率,特别适合中级Verilog开发者学习应用。

weixin_28725949的博客 187

带你一分钟了解电感与磁珠的区别

在电路设计中会经常使用到电感和磁珠,虽然在电路中的作用有所不同,但它们都属于磁性电子元器件,本文简单介绍下电感和磁珠的区别电感和磁珠电感和磁珠的结构主要由磁性材料金属线圈和外壳组成,具体结构如下图所示:电感磁珠结构图电感其实是金属线圈缠绕在磁芯上,而磁珠是在内部折叠后外围包裹着铁氧体磁性材料。电感器(Inductor)又称扼流器、电抗器、动态电抗器是储能器件,能够把电能转化为磁能而存储起来的元件。磁珠则是能量转换(消耗)器件,将流过他的高频信号以热能的形式消耗掉。

攻城狮鹏哥 1408

POJ 2464 Brownie Points II(树状数组)

题解:#include<set> #include<map> #include<queue> #include<stack> #include<cmath> #include<vector> #include<string> #include<cstdio> #include<cstring> #include<stdlib.h> #include<iostream> #include<algori

专注如一的博客 548

AI Agent 入门(一):什么是 AI Agent?——从概念到第一个 API 调用

AI Agent 入门(一):什么是 AI Agent?——从概念到第一个 API 调用

nbtang的博客 257

华为HCIE北京瑞萨考场亲测:从签到到交卷,一份超详细的硬件软件避坑指南

本文详细解析了华为HCIE北京瑞萨考场的全流程实战经验,从签到到交卷的22个关键细节,包括硬件设施、软件操作避坑指南和时间管理策略。特别针对考场环境、设备配置和考试系统操作提供了实用建议,帮助考生顺利通过HCIE认证考试。

weixin_33744854的博客 380

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

poj 2464 Brownie Points II 树状数组

题意: 给Stan个点,玩家Stan先经过某个点画一条竖线,玩家Ollie再经过这条线上的某一点画一条竖线,这样将整个区域分为4个区域,左上和右下里的点是Stan的得分,左下和右上是Ollie的得分,问Stan最多能得多少分和在保证Stan的最高分的情况下Ollie能得的最高分是多少.注意Stan选择一条竖线后Ollie要站在有利于自己的情况下考虑。 分析: 这题的本质是在足够快的时间内对每

sepNINE的专栏 660

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

POJ 2464 Brownie Points II 树状数组||线段树

这题不是一般的恶心人,简直就是个神题。 参考了一个大牛的思路写了个树状数组版本的,不推荐用线段树,但是练练线段树也不错。 http://hi.baidu.com/czyuan_acm/blog/item/af6fe8a9177f7ef51e17a2ea.html         这道题用二分也可以做的,这里介绍下树状数组的做法。首先有n个点,过每个点可以做x,y轴,把平面切成BL,

水 1635

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

POJ - 2464 Brownie Points II 【树状数组 + 离散化】【好题】

题目链接 http://poj.org/problem?id=2464 题意 在一个二维坐标系上 给出一些点 Stan 先画一条过一点的水平线 Odd 再画一条 过Stan那条水平线上的任一点的垂直线 这两条线将坐标系分成了四个区域 Stan的得分为右上角区域的点数+左下角区域的点数 Ollie的得分为左上角区域的点数+右下角区域的点数...

banshen0201的博客 181

poj2464Brownie Points II(树状数组)

晚上写了好久,终于把奇丑无比的代码改好了,试了几个样例都没问题,然后1A,真舒服 题目大意就是坐标平面上给N个点,然后先是Stan经过一个点做一条竖线,随之Ollie在Stan所做竖线上所有的点中选一个点做一条横线,两条线将平面分为四块, Stan的得分是右上和左下两块中点数之和,Ollie得分是左上和右下两块中点数之和,在直线上的点统统不计 最关键的是:两个人都想让自己的得分尽量高,然后输

T__TSZ的博客 455

【poj2464 Brownie Points II】(树状数组+离散化【好题】)

链接:http://poj.org/problem?id=2464题意:平面上有若干点,stan通过一个点划了一条直线,ollie通过在这条垂直直线上的点作了一条水平线,平面被分成4个象限,定义stan获得的分数为1,3象限的点的数量,ollie获得的分数为2,4象限上的点的数量,线上的点不归任何人所有。两人都采用最优的策略使自己获得的点数最大。由于stan的选择具有主动权,为了对自己有利,求st...

running_acmer的博客 453

POJ 2464 Brownie Points II(树状数组||线段树)

转载请注明出处,谢谢http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents    by---cxlove 很久以前,用线段树做过。 题意有点悬乎:有一些点,Stan选择某个点,经过这个点画一条竖线,Ollie选择一个经过这条直接的点画了条横线。 Stan选一,三象限的点,Ollie选二、四象限的点。 Stan的策略是,自己画一条竖线之后,Ol

窝不是爱酱,喵~~~~ 2159

POJ 2464 Brownie Points II(树状数组+扫描线)

果然题意罗里吧嗦的题做法也很麻烦。。 给出二维平面上的一些点,Stan可以任选一个点作一条垂线,然后Ollie可以在垂线上再选一个点作水平线。在一、三象限的点数算Stan的分数,在二、四象限的点算Ollie的分数。 两个人都想要自己的分数最大。 问Stan分数的最大值,且有多种情况时,按大小顺序列出Ollie的所有可能得分(无重复)。 主要重点是维护两棵x轴上的树状数组,当

Just One Last Coding~♬ 816

POJ 2464 Brownie Points II --树状数组

题意: 有点迷。有一些点,Stan先选择某个点,经过这个点画一条竖线,Ollie选择一个经过这条直接的点画一条横线。Stan选这两条直线分成的左下和右上部分的点,Ollie选左上和右下部分的点。Stan画一条竖线之后,Ollie有很多种选择,在所有选择中,Stan能获得 “分数最小值的最大值” ,而Ollie的选择便是让自己越多越好。问最后Stan最多能得到的分数是多少,以及在这种情况下Ollie

whatbeg 605

POJ 2464 Brownie Points II (树状数组,难题)

题意:在平面直角坐标系中给你N个点,stan和ollie玩一个游戏,首先stan在竖直方向上画一条直线,该直线必须要过其中的某个点,然后ollie在水平方向上画一条直线,该直线的要求是要经过一个stan画的竖线经过的点。这时候平面就被分割成了四块,两个人这时候会有一个得分,stan的得分是平面上第1、3象限内的点的个数,ollie的得分是平面上第2、4象限内的点的个数,在统计的时候所画线...

weixin_30609331的博客 151

Poj 3416 Crossing + Poj 2464 Brownie Points II (树状数组)

很像的两道题,放在一起总结 Poj 3416 Crossing 题目链接:http://poj.org/problem?id=3416 题意:在平面上有N个点,每个点都有一个坐标,然后在平面上划一条水平线,划一条垂直线,这两条线把平面分成四个区域,计算1区和3区点的和与2区和4区点的和的差的绝对值,即|(a1+a3)-(a2+a4)|,ai表示i区的点数目。点不会落在两条线上。要划M

whyorwhnt的专栏 1219

POJ 2464 Brownie Points II 树状数组+扫描线

题意奇葩的一笔,本质上就是一个复杂统计,智商低下的我想不出来只好去搜了题解 #include <cstdio> #include <cstring> #include <iostream> #include <map> #include <set> #include <vector> #include &lt...

weixin_30672295的博客 112
上一篇: uva1455 - Kingdom 线段树+并查集
下一篇: uva11983 - Weird Advertisement 矩形面积并 重叠大于等于K次的面积
小小小小葱
博客等级 码龄14年 22粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值