传送门

题中重要信息,每堆草的数量都不一样。

可以思考一下,什么情况下才会出现矛盾。

1.如果两个区间的最小值一样,但是这两个区间没有交集,那么就出现矛盾。

2.如果两个区间的最小值一样,并且这两个区间有交集,那么这个最小值一定在交集中,但是如果这个交集被某个最小值较大的区间,或是一些最小值较大的区间的并集包含,那么也是矛盾的。

可以二分答案,将这些区间按照最小值从大到小排序,然后可以用线段树维护,也可以用并查集来搞。

下面是用并查集来搞的。

每到一个区间,可以将[l,r]中的f变成r+1,如果发现find(l) > r那么说明这个区间已经被最小值较大的区间所包含。

#include <cstdio>
#include <iostream>
#include <algorithm>
#define N 1000011
#define min(x, y) ((x) < (y) ? (x) : (y))
#define max(x, y) ((x) > (y) ? (x) : (y))int n, q, ans;
int f[N];struct node
{int x, y, z;
}p[N], t[N];inline int read()
{int x = 0, f = 1;char ch = getchar();for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';return x * f;
}inline bool cmp(node x, node y)
{return x.z > y.z;
}inline int find(int x)
{return x == f[x] ? x : f[x] = find(f[x]);
}inline bool check(int k)
{int i, j, x, y, lmin, lmax, rmin, rmax;for(i = 1; i <= n + 1; i++) f[i] = i;for(i = 1; i <= k; i++) t[i] = p[i];std::sort(t + 1, t + k + 1, cmp);lmin = lmax = t[1].x;rmin = rmax = t[1].y;for(i = 2; i <= k; i++){if(t[i].z < t[i - 1].z){if(find(lmax) > rmin) return 1;for(j = find(lmin); j <= rmax; j++)f[find(j)] = find(rmax + 1);lmin = lmax = t[i].x;rmin = rmax = t[i].y;}else{lmin = min(lmin, t[i].x);lmax = max(lmax, t[i].x);rmin = min(rmin, t[i].y);rmax = max(rmax, t[i].y);if(lmax > rmin) return 1;}}if(find(lmax) > rmin) return 1;return 0;
}int main()
{int i, x, y, mid;n = read();q = read();for(i = 1; i <= q; i++)p[i].x = read(), p[i].y = read(), p[i].z = read();x = 1, y = q;while(x <= y){mid = (x + y) >> 1;if(check(mid)) ans = mid, y = mid - 1;else x = mid + 1;}printf("%d\n", ans);return 0;
}

  

转载于:https://www.cnblogs.com/zhenghaotian/p/7524445.html

[BZOJ1594] [Usaco2008 Jan]猜数游戏(二分 + 并查集)相关推荐

  1. bzoj 1594: [Usaco2008 Jan]猜数游戏【二分+线段树】

    写错一个符号多调一小时系列-- 二分答案,然后判断这个二分区间是否合法: 先按值从大到小排序,然后对于值相同的一些区间,如果没有交集则不合法:否则把并集在线段树上打上标记,然后值小于这个值的区间们,如 ...

  2. Java猜数游戏怎么验证_Java实现猜数游戏

    利用Math.random()方法产生1~100的随机整数,利用JOptionPane.showInputDialog()方法产生一个输入对话框,用户可以输入所猜的数.若所猜的数比随机生成的数大,则显 ...

  3. 好玩的猜数游戏(不是二分查找!四位数)

    以下是四位数的猜数游戏代码: #include <bits/stdc++.h> #include <windows.h> #include <stdio.h> #i ...

  4. 采用python语言实现猜数游戏_用python实现猜数游戏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 ...

  5. 「C++小游戏教程」猜数游戏

    0. 引言 本章主要讲解如何做一个简易的猜数游戏,分为用户猜数和系统猜数. 前置芝士: 「C++小游戏教程」基本技巧(1)--随机化 1. 用户猜数 系统想好一个在 [1,100][1,100][1, ...

  6. python猜数游戏在程序中预设一个_一道Python简单程序结构练习题

    1.猜数游戏. 在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜数字,如果大于预设的数, 显示"遗憾,太大了":如果小于预设的数,显示"遗憾,太小了": ...

  7. python猜数游戏流程_python简单猜数游戏实例

    本文实例讲述了python简单猜数游戏.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python import random number = random.randint ...

  8. php猜数游戏63,PHP实现猜数游戏的代码实例分享

    猜数游戏有两种玩法: 第一种:两个人玩,一方出数字,一方猜.出数字的人要想好一个指定位数的数,数字可重复,不能让猜的人知道. 猜的人就可以开始猜.每猜一个数,出数者就要说大过或小过出的数. 第二种:两 ...

  9. 计算机猜数游戏matlab,MATLAB课程设计报告猜数游戏设计

    课程设计的目的及意义 目的:通过本次课程设计,可以使我进一步认识MATLAB理论方法和实际意义,对理论知识进行必要实践.培养我们设计和仿真的基本能力,以便最终和生产实践以及其他科学结合. 意义: 1. ...

  10. 十四、Java练习:一个猜数游戏

    @Author:Runsen @Date:2020/5/23 本专栏是付费学Java专栏,今天我做一个猜数游戏.将前面,我写的全部复习下. 其实,这个猜数游戏,也是我学Java中的学过的. 文章目录 ...

最新文章

  1. ELK日志服务使用-kafka传输日志(bbotte.com)
  2. 径向基函数插值(4)三维数据的插值
  3. 环形公路堵车概率模型
  4. php怎麼开bcmath_php-如何启用BCMath CentOS 6
  5. php自动安装myqsl,php – 在自制的小牛上安装MySQL麻烦
  6. 8.4 bert的压缩讲解 意境级
  7. 这个时代,开发简单多了
  8. 数据库基础入门知识总结
  9. 乐视max2 刷入第三方recovery 然后刷入root 包 root
  10. 【Python】torrentParser1.01
  11. 【XXPHP源代码】把多个JS广告代码放到一个JS文件并调用
  12. 怎么在删除计算机里面搜索记录,Win7如何删除我的电脑搜索栏里面的搜索记录介绍三种删除win7搜索记录的方法...
  13. 项目部署后的域名配置
  14. 屏幕录制:4Easysoft Screen Recorder Mac中文版
  15. Python摆脱黑窗口的方法
  16. 自动(智能)驾驶系列| 插播 深挖自动驾驶数据集
  17. 【微信小程序】随机点名系统(点击开始滚动名字点击结束按钮结束滚动)
  18. 你不是学生,你是开发者
  19. 80年计算机专业硕士,多年多份多种多类的工作经验总结和分享,并提供技术咨询和培训、大学生志愿报考、专业学习及就业和面试指导
  20. canvas——绘制图片——动图制作

热门文章

  1. java镜像_012 制作Java基础镜像
  2. 阶段3 3.SpringMVC·_07.SSM整合案例_05.ssm整合之Spring整合SpringMVC的框架
  3. 阶段3 2.Spring_10.Spring中事务控制_2 作业-基于注解的AOP实现事务控制及问题分析_上...
  4. springboot 配置mybatis
  5. 匹配 边覆盖 独立集 顶点覆盖
  6. 编程之美学习之最长子序列的解法
  7. 今天解决了首页无头像被显示的问题
  8. 实现AJAX回传过程中禁止用户重复提交
  9. 电脑蓝屏后你该做的几桩要事
  10. Technical Art Director