bzoj1594
首先想到二分答案
然后我们从大往小加区间,如果之前出现了一个区间包含当前区间
那显然不合法,我们可以用并查集了维护
type node=record
x,y,mi,id:longint;
end; var q:array[..] of node;
a:array[..] of longint;
fa:array[..] of longint;
l,r,m,n,t,i,ans:longint; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end; procedure swap(var a,b:node);
var c:node;
begin
c:=a;
a:=b;
b:=c;
end; procedure sort(l,r:longint);
var i,j,x:longint;
begin
i:=l;
j:=r;
x:=q[(l+r) shr ].mi;
repeat
while x<q[i].mi do inc(i);
while q[j].mi<x do dec(j);
if not(i>j) then
begin
swap(q[i],q[j]);
inc(i);
dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end; function have(l,r:longint):boolean;
var x:longint;
begin
x:=r;
while x>=l do
begin
if fa[x]= then exit(false);
x:=fa[x]-;
end;
exit(true);
end; procedure work(l,r:longint);
var x:longint;
begin
x:=r;
while x>=l do
begin
if fa[x]= then fa[x]:=l
else begin
x:=fa[x];
if x>=l then fa[x]:=l;
end;
dec(x);
end;
end; function check(m:longint):boolean;
var s,i,j,x,y,k:longint;
begin
fillchar(fa,sizeof(fa),);
s:=;
for i:= to t do
if q[i].id<=m then
begin
inc(s);
a[s]:=i;
end; i:=;
while i<s do
begin
inc(i);
j:=i+;
while (j<=s) and (q[a[i]].mi=q[a[j]].mi) do inc(j);
dec(j);
x:=;
y:=n+;
for k:=i to j do
begin
x:=max(x,q[a[k]].x);
y:=min(y,q[a[k]].y);
end;
if x>y then exit(false);
if have(x,y) then exit(false);
for k:=i to j do
work(q[a[k]].x,q[a[k]].y);
i:=j;
end;
exit(true);
end; begin
readln(n,t);
for i:= to t do
begin
readln(q[i].x,q[i].y,q[i].mi);
q[i].id:=i;
end;
sort(,t);
l:=;
r:=t-;
if check(t) then writeln()
else begin
ans:=t;
while l<=r do
begin
m:=(l+r) shr ;
if not check(m) then
begin
ans:=m;
r:=m-;
end
else l:=m+;
end;
writeln(ans);
end;
end.
bzoj1594的更多相关文章
- 【BZOJ1594】[Usaco2008 Jan]猜数游戏 二分答案+并查集
[BZOJ1594][Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在 ...
- [bzoj1594] [Usaco2008 Jan]猜数游戏
二分答案(二分没冲突的前Q-1个问题),用并查集判定(用法同bzoj 1576) 假设一个询问区间[l,r],最小干草堆数目是A,我们可以得出[l,r]上的干草堆数目都>=A. 二分出mid后, ...
- bzoj1594 Pku3764 The xor-longest Path
题目链接 先求每个点到根的异或和 然后就要找出两个点,使dis[a]^dis[b]最大 注意异或的性质,我们可以用trie树,沿着与当前数字每位的相反方向走 #include<algorithm ...
- 【bzoj1594】猜数游戏
1594: [Usaco2008 Jan]猜数游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 556 Solved: 225 Descripti ...
- [BZOJ1594] [Usaco2008 Jan]猜数游戏(二分 + 并查集)
传送门 题中重要信息,每堆草的数量都不一样. 可以思考一下,什么情况下才会出现矛盾. 1.如果两个区间的最小值一样,但是这两个区间没有交集,那么就出现矛盾. 2.如果两个区间的最小值一样,并且这两个区 ...
- 【刷题记录】BZOJ-USACO
接下来要滚去bzoj刷usaco的题目辣=v=在博客记录一下刷题情况,以及存一存代码咯.加油! 1.[bzoj1597][Usaco2008 Mar]土地购买 #include<cstdio&g ...
- bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)
听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...
随机推荐
- OC self super isa指针
self指针: self是oc面向对象设计中的一个特殊指针,相当于java中的this,但是比this强大,this只能访问实例对象的相关方法和成员变量,或者说this只代表实例对象: self不仅可 ...
- c语言编程之队列(链表实现)
用链表实现了队列,完成了队列的入队和出队功能. #include"stdio.h" typedef int element; typedef struct Node{ struct ...
- javascript实现播放音乐
<script language="javascript"> var flag = 0; //控制变量放在函数内起不到作用.function openplay() { ...
- asp.net中json格式化及在js中解析json
类: public class UploadDocumentItem { public UploadDocumentItem() { } public string DocMuid { get; se ...
- Eclipse 安装热部署JRebel
开发环境 sts-3.7.2.RELEASE 安装步骤 1.打开应市场 2.搜索JRebel并进行下载 3.下载完成后点击JReble Configuation进入
- Maven--(一个坑)在settings.xml文件中添加mirrors导致无法新建Maven项目
这是用新电脑第一次创建Maven项目--当然是一个测试项目.已经差不多忘了该怎样做,所以参考我的博客:http://www.cnblogs.com/wql025/p/4996486.html,这应该是 ...
- 网络编程之ping
#include <sys/types.h>#include <netinet/ip.h>#include <netdb.h>#include<arpa/in ...
- 初学tornado之MVC版helloworld
作者:the5fire | 标签: MVC tornado | 发布:2012-08-06 2:41 p.m. 文接上篇,看我一个简单的helloworld,虽然觉得这个框架着实精小,但是实际开发 ...
- HDU 2544 最短路(模板题)
求1到N的最短路径,模板题,以1为源点,用dijkstra算法(可以用优先级队列优化) #include <iostream> #include <algorithm> #in ...
- http://www.aboutyun.com/thread-8792-1-1.html
http://www.aboutyun.com/thread-8792-1-1.html