博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ3179 Corral the Cows——线段树+离散化
阅读量:4971 次
发布时间:2019-06-12

本文共 1983 字,大约阅读时间需要 6 分钟。

算法讨论:

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

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

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

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

代码:

program corral;//By_Thispoetconst	maxn=505;maxx=10005;var	i,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);begin	if i<>j then begin i:=i xor j;j:=i xor j;i:=i xor j;end;end;procedure qsort(l,r:longint);var i,j,k:longint;begin	i:=l;j:=r;k:=y[i+random(j-i+1)];	repeat		while y[i]
k do dec(j); if i<=j then begin swap(x[i],x[j]);swap(y[i],y[j]);inc(i);dec(j); end; until i>j; if l
=r then exit;mid:=(l+r)>>1; build_tree(code*2,l,mid);build_tree(code*2+1,mid,r);end;procedure insert_tree(code,l,r,data:longint);var mid:longint;begin if (tree[code].l=l)and(tree[code].r=r) then begin inc(tree[code].num,data);exit; end;mid:=(tree[code].l+tree[code].r)>>1; if mid>=r then insert_tree(code*2,l,r,data) else insert_tree(code*2+1,l,r,data); tree[code].num:=tree[code*2].num+tree[code*2+1].num;end;function count(code,l,r:longint):longint;var mid:longint;begin if (tree[code].l=l)and(tree[code].r=r) then exit(tree[code].num); mid:=(tree[code].l+tree[code].r)>>1; if mid>=r then exit(count(code*2,l,r)) else if mid<=l then exit(count(code*2+1,l,r)); exit(count(code*2,l,mid)+count(code*2+1,mid,r));end;function min(i,j:longint):longint;begin if i
=c then begin for j:=i to p do if count(1,x[j]-1,min(x[j]+pos-1,maxx))>=c then exit(true); end; insert_tree(1,x[i]-1,x[i],-1); end; exit(false);end;begin readln(c,n);randomize; for i:=1 to n do readln(x[i],y[i]);qsort(1,n);p:=0; left:=0;right:=maxx; while left<=right do begin mid:=(left+right)>>1; build_tree(1,0,maxx); if check(mid) then begin right:=mid-1;ans:=mid; end else left:=mid+1; end; writeln(ans);end.

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

你可能感兴趣的文章
swift新特性(__nullable和__nonnull
查看>>
IIS 之 HTTP错误信息提示
查看>>
JQuery几点用法摘记
查看>>
网络编程系列之Winsock
查看>>
c# window服务-初学习
查看>>
Hive学习之路 (十九)Hive的数据倾斜
查看>>
Hat’s Words
查看>>
MyBatis 源码分析——介绍
查看>>
微软BI 之SSIS 系列 - 再谈Lookup 缓存
查看>>
Java中instanceof关键字的用法总结
查看>>
js,css引用顺序设定
查看>>
【微信开发】LINUX-windows下用navicat远程链接虚拟机Linux下MySQL数据库
查看>>
ArcGIS 添加 MarkerSymbol 弹出“图形符号无法序列化为 JSON”错误
查看>>
引用类型-Function类型
查看>>
洗牌Shuffle'm Up POJ-3087 模拟
查看>>
设计模式之享元模式
查看>>
.vimrc配置
查看>>
STM32-M0中断优先级介绍
查看>>
Nginx Configuration 免费HTTPS加密证书
查看>>
无法打开FTP在 windows资源管理器中打开FTP站点解决方法
查看>>