The cows, who always have an inferiority complex about their intelligence, have a new guessing game to sharpen their brains.A designated 'Hay Cow' hides behind the barn and creates N (1 ≤ N ≤ 1,000,000) uniquely-sized stacks (conveniently numbered 1..N) of hay bales, each with 1..1,000,000,000 bales of hay.The other cows then ask the Hay Cow a series of Q (1 ≤ Q ≤ 25,000) questions about the the stacks, all having the same form:What is the smallest number of bales of any stack in the range of stack numbers Ql..Qh (1 ≤ Ql ≤ N; Ql ≤ Qh ≤ N)?The Hay Cow answers each of these queries with a single integer A whose truthfulness is not guaranteed.Help the other cows determine if the answers given by the Hay Cow are self-consistent or if certain answers contradict others.

并查集+二分。

有两种产生矛盾的情况。

题目中的两个元素的值没有任何数量是一样的,所以如果两个最小值相同的区间没有交集,则这两个区间产生矛盾。

如果一个区间包含一个最小值比其小的区间,则产生矛盾。

可以二分答案判断到此是否可行。

为方便处理矛盾,二分检查时我们按照预估最小值大到小排序。注意并查集合并区间的细节处理。当区间左右端点相同时,并查集找左右端点是显然会找到相同元素且这合法。并查集合并区间时,是将区间内的元素的父亲指向右端点的后一个元素,如果查询区间的右端点是本身,该点实际并未合并。其余情况如果要检查的区间被完全包含则存在矛盾。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; typedef long long ll;
#define rint register int inline void getint(int &x)
{
char c;
for(c=getchar();c>'9'||c<'0';c=getchar());
for(x=0;c>='0'&&c<='9';c=getchar())
x=(x<<1)+(x<<3)+c-'0';
}
const int MAXN=1000000+5;
struct Seg
{
int l,r,v;
}e[MAXN];
int lim,n;
int srt[MAXN],fa[MAXN]; bool cmp(int a,int b)
{
if(e[a].v==e[b].v)
return e[a].l==e[b].l?e[a].r<e[b].r:e[a].l<e[b].l;
return e[a].v>e[b].v;
} int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
} bool check(int mid)
{
for(rint i=1;i<=mid;++i)
srt[i]=i;
for(rint i=1;i<=lim;++i)
fa[i]=i;
sort(srt+1,srt+mid+1,cmp);
int x,y;
for(int i=1;i<=mid;++i)
{
int t=e[srt[i]].v,l=e[srt[i]].l,
r=e[srt[i]].r,lm=e[srt[i]].l,rm=e[srt[i]].r;
while(i+1<=mid&&t==e[srt[i+1]].v)
{
++i;
if(e[srt[i]].l>r)
return 0;
l=max(l,e[srt[i]].l);
r=min(r,e[srt[i]].r);
lm=min(lm,e[srt[i]].l);
rm=max(rm,e[srt[i]].r);
}
int x=find(l),y=find(r);
if((l!=r&&x==y&&y!=r)||(l==r&&y!=r)) //注意此处判断
return 0;
x=lm,y=rm;
int rg=find(y+1);
while(rg!=find(x))
{
int fx=find(x);
fa[fx]=fa[fx+1];
}
}
return 1;
} int main()
{
scanf("%d%d",&lim,&n);
for(int i=1;i<=n;++i)
getint(e[i].l),getint(e[i].r),getint(e[i].v);
int l=1,r=n+1;
while(r-l>1)
{
int mid=l+r>>1;
if(check(mid))
l=mid;
else r=mid;
}
printf("%d",l==n?0:l+1);
return 0;
}

[USACO08JAN]Haybale Guessing(LuoguP2898)的更多相关文章

  1. 题解—P2898 [USACO08JAN]Haybale Guessing G

    pre 首先注意一下翻译里面并没有提到的一点,也是让我没看懂样例的一点,就是这个长度为 \(n\) 的数组里面的数各不相同. 有很多人用并查集写的这道题,题解里面也有一些用线段树写的,不过我认为我的做 ...

  2. 洛谷 P2898 [USACO08JAN]haybale猜测Haybale Guessing 解题报告

    [USACO08JAN]haybale猜测Haybale Guessing 题目描述 给一段长度为\(n\),每个位置上的数都不同的序列\(a[1\dots n]\)和\(q\)和问答,每个问答是\( ...

  3. POJ 3657 Haybale Guessing(区间染色 并查集)

    Haybale Guessing Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2384   Accepted: 645 D ...

  4. Haybale Guessing

    Haybale Guessing Time Limit: 1000MS   Memory Limit: 65536K       Description The cows, who always ha ...

  5. [USACO08JAN]haybale猜测Haybale Guessing

    题目描述 The cows, who always have an inferiority complex about their intelligence, have a new guessing ...

  6. 【[USACO08JAN]haybale猜测Haybale Guessing】

    抄题解.jpg 完全完全不会啊,这道题简直太神了 不过抄题解可真开心 首先这道题目保证了每一个位置上的数都是不同的,那么就能得到第一种判断不合法的方式 如果两个区间的最小值一样,但是两个区间的交集为空 ...

  7. [USACO 08JAN]Haybale Guessing

    Description The cows, who always have an inferiority complex about their intelligence, have a new gu ...

  8. poj-3657 Haybale Guessing(二分答案+并查集)

    http://poj.org/problem?id=3657 下方有中文版,不想看英文的可直接点这里看中文版题目 Description The cows, who always have an in ...

  9. POJ - 3657 Haybale Guessing(二分+并查集)

    题意:有N个大小各不相同的点,给定Q个询问,格式为q1,q2,A,表示区间q1~q2的最小值是A,问第一个与之前询问结果出现冲突的询问. 分析: 1.二分询问的标号mid,查询1~mid是否出现询问冲 ...

随机推荐

  1. Winform递归绑定树节点

    /// <summary> /// 绑定树节点 /// </summary> /// <param name="pid"></param& ...

  2. 图片,base64 互转

    import sun.misc.BASE64Decoder; import java.io.FileOutputStream; import java.io.OutputStream; /** * @ ...

  3. Python基础笔记2

    @time 2019/12/17 12:04 一.列表 1.增加数据:append.insert方法 names = ["兰陵王", "孙悟空", " ...

  4. 将自定义工程加入到python根目录下

    1. 在D:\Program Files\Python\Lib\site-packages 添加.pth文件,文件名为模块名称(即auto_XXX),文件内容为模块所在目录.(python添加自定义的 ...

  5. VMware vSphere Client

    复制虚拟机 在虚拟机关机状态下,选中一个虚拟机,文件 - 导出 - 导出OVF模板,导出成功后,再文件 - 部署OVF模板(修改IP.MAC.主机名称)

  6. python3练习100题——032

    链接:http://www.runoob.com/python/python-exercise-example32.html 题目:按相反的顺序输出列表的值. 我的代码: for i in li[:: ...

  7. 关于强类型、ViewData

    对于ASP.NET MVC中页面强类型的个人理解   进入ASP.NET MVC学习 发现很多和winfrom不同的东西,但是利用的C#语言还是没有变化,更多的是利用了新的语言,html jquery ...

  8. fastadmin 框架中图片点击放大

    fastadmin的原生图片预览,重新打开一个窗口太麻烦,使用layui做一个弹窗式的图片预览 1.将下面代码放在backend-init.js文件中 $('body').on('click', '[ ...

  9. 【翻译】浅析为何使用融合CDN是大趋势

    使用传统CDN的用户遇到的新问题 随着云计算时代的快速发展,尤其是流媒体大视频时代的到来,用户在是使用过往CDN节点资源调配将面临很多问题: 问题1: 流媒体时代不局限于静态内容分发,直播点播等视频服 ...

  10. 面试官所问的--Token认证

    写这一篇文章的来源是因为某一天的我被面试官提问:让你设计一个登录页面,你会如何设计? 我当时的脑子只有??? 不就是提交账号.密码给后台就搞定了呢? 不可能那么简单,我弱弱的想,难道要对密码加密?? ...