poj2464Brownie Points II(树状数组)

树状数组超详解外加大量题解 我见过的树状数组的最详细解答,没有之一,保证你能看懂,如果有图解就更完美了。 立即下载

晚上写了好久,终于把奇丑无比的代码改好了,试了几个样例都没问题,然后1A,真舒服

题目大意就是坐标平面上给N个点,然后先是Stan经过一个点做一条竖线,随之Ollie在Stan所做竖线上所有的点中选一个点做一条横线,两条线将平面分为四块,

Stan的得分是右上和左下两块中点数之和,Ollie得分是左上和右下两块中点数之和,在直线上的点统统不计

最关键的是:两个人都想让自己的得分尽量高,然后输出Stan至少能得多少分(是是是Stan是绝顶聪明的一定不会放水选次优解的),且输出Ollie在每一种Stan

取到Stan的最优解时Ollie能拿多少分

首先N只有200000,第一想法就是暴力枚举两条线的交点,这样只要能快速求出对应四个块有多少个点就OK了

这个时候我想着看能不能降一维,因为开不下二维树状数组,降维首先想到将某一关键字排序,但好像都不能成功降维,不过隐约可以感觉到要以x为关键字排序

然后想想维护y轴可以用树状数组,在暴力扫的时候用两个树状数组,一个维护现在还没有扫到的点(那么这些点的x值肯定大于当前点的x值),所以在这个树状

数组里可以查询右上和右下的点,另一个树状数组用于维护扫过的点,那么这些点的x值肯定小于当前点的x值,所以这个树状数组里可以查询左上和左下的点

不过注意x值相同的点之间的处理,而且y是要离散化一下的

代码

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<vector>
using namespace std;
const int maxn=200005;
int N;
struct BIT{
  int t[maxn];
  void init()
  {
    memset(t,0,sizeof t);
  }
  void update(int x,int v)
  {
    while(x<maxn)
    {
      t[x]+=v;
      x+=(x&-x);
    }
  }
  long long query(int x)
  {
    int ans=0;
    while(x)
    {
      ans+=t[x];
      x-=(x&-x);
    }
    return ans;
  }
}thl,thr;
struct node
{
  int x,y,id;
}num[maxn];
bool cmp(node a,node b)
{
  return a.x<b.x;
}
bool CMP(node a,node b)
{
  return a.y<b.y;
}
int st[maxn];
int main()
{
  while(~scanf("%d",&N)&&N)
  {
    int res=-1;
    int tot=0;
    thl.init(),thr.init();
    for(int i=0;i<N;i++)scanf("%d%d",&num[i].x,&num[i].y);
    sort(num,num+N,CMP);
    num[0].id=1;
    for(int i=1;i<N;i++)if(num[i].y==num[i-1].y)num[i].id=num[i-1].id;else num[i].id=num[i-1].id+1;
    for(int i=0;i<N;i++)thr.update(num[i].id,1);
    sort(num,num+N,cmp);
    int i=0;
    while(i<N)
    {
      int tempanss=10000000;
      int temp=i;
      while(num[temp].x==num[temp+1].x){temp++;thr.update(num[temp].id,-1);}
      for(int j=i;j<=temp;j++)
      {
        int ans=thl.query(num[j].id-1)+thr.query(200001)-thr.query(num[j].id);
        tempanss=min(ans,tempanss);
      }
      if(temp>i)thr.update(num[i].id,-1);

      int ti=i;
      while(ti<=temp)
      {
        if(tempanss>maxn)
        {
          int ans=thl.query(num[ti].id-1)+thr.query(200001)-thr.query(num[ti].id);
          tempanss=min(tempanss,ans);
        }
        if(tempanss>res&&tempanss<maxn)
        {
          tot=0;
          int ans=thl.query(200005)-thl.query(num[ti].id)+thr.query(num[ti].id-1);
          st[tot++]=ans;
          res=tempanss;
        }
        else if(tempanss==res&&tempanss<maxn)
        {
          int ans=thl.query(200005)-thl.query(num[ti].id)+thr.query(num[ti].id-1);
          st[tot++]=ans;
        }
        ti++;
      }
      if(temp==i)thr.update(num[i].id,-1);
      while(i<=temp)
      {
        thl.update(num[i].id,1);
        i++;
      }
    }
    sort(st,st+tot);
    int a=unique(st,st+tot)-st;
    printf("Stan: %d; Ollie:",res);
    for(int i=0;i<a;i++)printf(" %d",st[i]);
    printf(";\n");
  }
  return 0;
}


SFF-8654接口引脚定义全解析:从SAS到U.2的高速硬件连接核心 在高速数据存储与传输领域,接口标准是连接主机与存储设备、确保信号完整性与协议互通性的物理基础。其核心原理在于通过精确定义的物理引脚和电气特性,承载不同的高速串行通信协议,如SAS和PCIe。这类高密度连接器的技术价值在于以紧凑的形态支持多协议兼容与高速率传输,满足了企业级存储、高性能计算对带宽和可靠性的苛刻要求。典型的应用场景包括服务器硬盘背板连接、NVMe U.2固态硬盘直连以及外部存储扩展。本文聚焦于SFF-8654(亦称Mini SAS HD)这一关键接口,深入剖析其引脚定义、信号分区(如高速数据通道 阅读详情

相关推荐

1、Ovirt 开源虚拟化平台安装

Ovirt虚拟化Node和Engine安装

大鱼 6266

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

无人驾驶感知融合——横摆角速度的多源估计算法解析

本文深入解析了无人驾驶感知融合中的横摆角速度多源估计算法,详细介绍了轮速差法、侧向加速度法、曲率法和惯性传感器直读法四种计算方法及其优缺点。通过卡尔曼滤波实战案例,展示了多源融合算法在提升精度和稳定性方面的显著优势,并探讨了工程实践中的时间对齐、坐标系统一等关键问题。

weixin_31458015的博客 459

poj2464 线段树扫描线

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

丿Smilē 丶晨星灬 923

Android开发者必看:火山引擎API验签实战,5分钟搞定年龄变化接口调用

本文为Android开发者提供火山引擎API验签实战指南,重点解析HMAC-SHA256签名算法实现,并以年龄变化接口为例展示完整调用流程。通过OkHttp封装和性能优化建议,帮助开发者5分钟内快速集成火山引擎人像处理功能,解决API调用中的签名验证、参数编码等核心问题。

weixin_30342209的博客 316

从加权最小二乘(WLS)到IAA:手把手推导DOA估计中的迭代自适应核心公式

本文深入解析了从加权最小二乘(WLS)到迭代自适应算法(IAA)在DOA估计中的数学推导与应用。通过动态调整加权矩阵,IAA在低快拍数、相干源等复杂场景中展现出卓越性能,显著提升角度分辨率和检测概率。文章详细介绍了算法核心步骤、工程优化策略及前沿发展,为雷达探测和无线通信领域提供重要参考。

weixin_30847865的博客 287

poj 2464(离散化+BIT)

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

qkoqhh 364

避开这5个坑!STC8H DMA串口通信的实战避坑指南(115200波特率实测)

本文深入解析了STC8H单片机利用DMA实现稳定全双工串口通信的实战要点。针对115200高波特率场景,详细拆解了DMA-UART架构、关键寄存器配置、时钟精度计算、缓冲区管理及中断协同等核心环节,并提供了具体的避坑指南和调试方法,帮助开发者构建高效可靠的通信链路。

melon的博客 674

【Poj】2464 (线段树)

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

Jason 610

Dify基础:Dify平台的本地化部署(含windows部署中,常见问题及解决方案)

第一种比较简单,只需要在浏览器中,打入https://dify.ai/就可以。这个指令虽然看起来简单,但实际上涉及到对docker的使用。这个项目既然有github地址,那它一般就是开源的。我们点开这个github地址,便能看到dify的私有化部署方式。我们可以看到,还是上面那个图,有个按钮,是指向该项目的Github地址的。第二步:按照dify的github给出的指令,对dify进行安装。第一步:我们把dify下载到自己的电脑(或者服务器)上。这里,我们只考虑第二种方式,也就是私有化部署。

xiezhipu的博客 1万+

【软考中级】多媒体应用设计师复习笔记第十章【free】

第10章法律法规与标准规范 行业标准 缩写的大写拼音 地方标准 DB加生代码 企业标准Q加斜线企业代号国际标准是国际标准化组织ISO和国际电工委员会IEC制定的标准 国家标准是由国务院标准化行政主管部门制定,全国范围内使用 ?强制性国家标准的代号为GB,推荐性国家标准的代号为GB/T。 ?软件开发规范GB8566-88属于强制性国家标准 在这里插入图片描述 行业标准代号由大写汉语拼音字母组成,加上斜线和T,组成推荐性行业标准,如XX/T。已经发布的行业代号有QJ(航天),SJ(电子

weixin_47120900的博客 639

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

【立创EDA-PCB设计基础】1.嘉立创EDA专业版软件安装+PCB基本概念+原理图绘制

本文详解PCB基本概念以及实现MCU最小系统原理图的绘制(原理图包括MCU芯片GD32F103C8T6、外部晶振、输出端口、USB输入口、5v转3v3稳压输出、复位按键、唤醒按键、LED)及嘉立创EDA专业版软件安装。为本专栏【立创EDA-PCB设计基础】后面章节实现PCB绘制做准备。

嵌入式阿齐Archie 3万+

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

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

weixin_33744854的博客 380

visio安装包

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

poj 2464 Brownie Points II 树状数组

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

sepNINE的专栏 660

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

poj2464 Brownie Points II 树状数组

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 lin

553

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

水 1635

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

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

banshen0201的博客 181

【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
上一篇: poj1990MooFest(树状数组)
下一篇: Gym - 101669A Concerts
T__TSZ
博客等级 码龄10年 2粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值