热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

POJ3179CorraltheCows——线段树+离散化

算法讨论:先按照y坐标排好序。二分答案,利用线段树判断是否可行。这算不算是离散化呢?算是广义的离散化吧。开始的时候没有更新,

算法讨论:

先按照y坐标排好序。二分答案,利用线段树判断是否可行。

这算不算是离散化呢?算是广义的离散化吧。

开始的时候没有更新,后来意识到错误后加上了更新反而错了,于是就偷了个懒把线段树build了log10000次,这样时间复杂度就变成了(log10000)^2*10000,过得很纠结……

其实不用build那么多次线段树的。

代码:

program corral;//By_Thispoet
constmaxn=505;maxx=10005;
vari,j,p,c,n,mid,left,right,ans,k :longint;tree :array[0..maxx*10]of record l,r,num:longint;end;x,y :array[0..maxn]of longint;procedure swap(var i,j:longint);
beginif i<>j then begin i:&#61;i xor j;j:&#61;i xor j;i:&#61;i xor j;end;
end;procedure qsort(l,r:longint);
var i,j,k:longint;
begini:&#61;l;j:&#61;r;k:&#61;y[i&#43;random(j-i&#43;1)];repeatwhile y[i]k do dec(j);if i<&#61;j then beginswap(x[i],x[j]);swap(y[i],y[j]);inc(i);dec(j);end;until i>j;if lend;procedure build_tree(code,l,r:longint);
var mid:longint;
begintree[code].l:&#61;l;tree[code].r:&#61;r;tree[code].num:&#61;0;if l&#43;1>&#61;r then exit;mid:&#61;(l&#43;r)>>1;build_tree(code*2,l,mid);build_tree(code*2&#43;1,mid,r);
end;procedure insert_tree(code,l,r,data:longint);
var mid:longint;
beginif (tree[code].l&#61;l)and(tree[code].r&#61;r) then begininc(tree[code].num,data);exit;end;mid:&#61;(tree[code].l&#43;tree[code].r)>>1;if mid>&#61;r then insert_tree(code*2,l,r,data) else insert_tree(code*2&#43;1,l,r,data);tree[code].num:&#61;tree[code*2].num&#43;tree[code*2&#43;1].num;
end;function count(code,l,r:longint):longint;
var mid:longint;
beginif (tree[code].l&#61;l)and(tree[code].r&#61;r) then exit(tree[code].num);mid:&#61;(tree[code].l&#43;tree[code].r)>>1;if mid>&#61;r then exit(count(code*2,l,r)) else if mid<&#61;l then exit(count(code*2&#43;1,l,r));exit(count(code*2,l,mid)&#43;count(code*2&#43;1,mid,r));
end;function min(i,j:longint):longint;
beginif iend;function check(pos:longint):boolean;
beginif pos&#61;0 then exit(false);p:&#61;0;for i:&#61;1 to n do beginwhile (p&#61;c then beginfor j:&#61;i to p do if count(1,x[j]-1,min(x[j]&#43;pos-1,maxx))>&#61;c then exit(true);end;insert_tree(1,x[i]-1,x[i],-1);end;exit(false);
end;beginreadln(c,n);randomize;for i:&#61;1 to n do readln(x[i],y[i]);qsort(1,n);p:&#61;0;left:&#61;0;right:&#61;maxx;while left<&#61;right do beginmid:&#61;(left&#43;right)>>1;build_tree(1,0,maxx);if check(mid) then beginright:&#61;mid-1;ans:&#61;mid;end else left:&#61;mid&#43;1;end;writeln(ans);
end.


转:https://www.cnblogs.com/Thispoet/archive/2011/10/24/2222898.html



推荐阅读
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 题目《BZOJ2654: Tree》的时间限制为30秒,内存限制为512MB。该问题通过结合二分查找和Kruskal算法,提供了一种高效的优化解决方案。具体而言,利用二分查找缩小解的范围,再通过Kruskal算法构建最小生成树,从而在复杂度上实现了显著的优化。此方法不仅提高了算法的效率,还确保了在大规模数据集上的稳定性能。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 通过优化动态网络Cookies的全网互通机制,实现了用户在任意子站点的登录和注销操作均能同步至整个网络。具体实现涉及对三个关键文件的修改:首先,在`incDv_ClsMain.asp`中定位并调整`Response.Cookies`的相关设置;其次,更新`global.asa`以确保会话状态的一致性;最后,修改`login.asp`以支持跨域认证。这一改进不仅提升了用户体验,还增强了系统的安全性和可靠性。 ... [详细]
  • 深入浅出 webpack 系列(二):实现 PostCSS 代码的编译与优化
    在前一篇文章中,我们探讨了如何通过基础配置使 Webpack 完成 ES6 代码的编译。本文将深入讲解如何利用 Webpack 实现 PostCSS 代码的编译与优化,包括配置相关插件和加载器,以提升开发效率和代码质量。我们将详细介绍每个步骤,并提供实用示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 在Ubuntu上安装MySQL时解决缺少libaio.so.1错误及libaio在MySQL中的重要性分析
    在Ubuntu系统上安装MySQL时,遇到了缺少libaio.so.1的错误。本文详细介绍了如何解决这一问题,并深入探讨了libaio库在MySQL性能优化中的重要作用。对于初学者而言,理解这些依赖关系和配置步骤是成功安装和运行MySQL的关键。通过本文的指导,读者可以顺利解决相关问题,并更好地掌握MySQL在Linux环境下的部署与管理。 ... [详细]
  • 图论入门基础教程
    图论是计算机科学和数学中的重要分支,本教程旨在为初学者提供全面的基础知识。通过实例解析,如“昂贵的聘礼”问题,讲述了一个年轻探险家在印第安部落与酋长女儿的爱情故事,展示了图论在解决实际问题中的应用。教程内容涵盖了图的基本概念、表示方法以及常见算法,适合各类读者学习。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
author-avatar
晰mine
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有