首先想到二分答案

然后我们从大往小加区间,如果之前出现了一个区间包含当前区间

那显然不合法,我们可以用并查集了维护

 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的更多相关文章

  1. 【BZOJ1594】[Usaco2008 Jan]猜数游戏 二分答案+并查集

    [BZOJ1594][Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在 ...

  2. [bzoj1594] [Usaco2008 Jan]猜数游戏

    二分答案(二分没冲突的前Q-1个问题),用并查集判定(用法同bzoj 1576) 假设一个询问区间[l,r],最小干草堆数目是A,我们可以得出[l,r]上的干草堆数目都>=A. 二分出mid后, ...

  3. bzoj1594 Pku3764 The xor-longest Path

    题目链接 先求每个点到根的异或和 然后就要找出两个点,使dis[a]^dis[b]最大 注意异或的性质,我们可以用trie树,沿着与当前数字每位的相反方向走 #include<algorithm ...

  4. 【bzoj1594】猜数游戏

    1594: [Usaco2008 Jan]猜数游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 556  Solved: 225 Descripti ...

  5. [BZOJ1594] [Usaco2008 Jan]猜数游戏(二分 + 并查集)

    传送门 题中重要信息,每堆草的数量都不一样. 可以思考一下,什么情况下才会出现矛盾. 1.如果两个区间的最小值一样,但是这两个区间没有交集,那么就出现矛盾. 2.如果两个区间的最小值一样,并且这两个区 ...

  6. 【刷题记录】BZOJ-USACO

    接下来要滚去bzoj刷usaco的题目辣=v=在博客记录一下刷题情况,以及存一存代码咯.加油! 1.[bzoj1597][Usaco2008 Mar]土地购买 #include<cstdio&g ...

  7. bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)

    听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...

随机推荐

  1. 关于 iOS10 更新后 360 云盘 的上传按钮消失的解决方案

    最近出了iOS10,作为iOS开发者,果断更新. 但是更新完后,打开自己的360云盘,发现想向云盘上传东西,但是传不了,加号按钮不见了. 经过我的研究,原因是 下面的自定义tabbar放置加号按钮的方 ...

  2. anroid ndk编译ffmpeg 引用librtmp libx264

    Ffmpeg 无处不在,自然android系统少不了它,折腾了不少时间完成 ndk编译ffmpeg,生成so库中引用了外部库librtmp,libx264.条条大路通罗马, 也许还有别的更好的方法去完 ...

  3. OC 加密

    //MD5加密的结果为128位的二进制数. //所以有128 / 8 = 16字节(8位一个字节). //每八位表示两个16进制数. //MD5 有32个16进制数. //语言层次的所有摘要算法步骤类 ...

  4. win7下Chrome有两个图标的解决方法

    摘抄自:http://www.sevenforums.com/browsers-mail/238406-windows-7-taskbar-creating-double-google-chrome- ...

  5. 【环境】Linux下连接无线网常用命令

    启用/重启/关闭 网络服务 /etc/init.d/networking start /etc/init.d/networking restart /etc/init.d/networking sto ...

  6. 1231: [Usaco2008 Nov]mixup2 混乱的奶牛 - BZOJ

    Description 混乱的奶牛 [Don Piele, 2007] Farmer John的N(4 <= N <= 16)头奶牛中的每一头都有一个唯一的编号S_i (1 <= S ...

  7. BZOJ 2763: [JLOI2011]飞行路线 spfa dp

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2763 题解: d[x][kk]表示从s到x用了kk次免费机会的最少花费. 代码: #in ...

  8. Matlab中cell2mat的使用

    binIndices是1*50的cell,每个cell是的1*n(n不定),那么cell2mat(binIndices)得到的是1*sum(cellfun(@length,binIndices))的行 ...

  9. uva 11076

    计算出每一位上数字i会出现的次数  累加 #include <cstdio> #include <cstdlib> #include <cmath> #includ ...

  10. Eclipse对svn操作切换账号或更换svn地址方法

    1. 切换账号,主要是删除配置文件达到重新更新svn的时候,弹出框让重新输入新的svn用户名和密码. 1.通过删除SVN客户端的账号配置文件   1)查看你的Eclipse中使用的是什么SVN Int ...