主要是怎么处理矛盾

矛盾的条件有$2$种:

第一种是当把所有相等的$a$都全部找到后,他们并没有全联通,所以矛盾,因为没有两个是相同的

第二种是在2组$(l,r,a)$,$(l1,r1,a1)$中,$a<a1$并且$(l,r)$ 包含在$(l1,r1)$,矛盾

所以怎么去维护,第一种直接暴力查询,第二种我们可以从大到小排序$minn$,去在线段树中维护并集操作,看一看是否被覆盖即可

此答案具有单调性,所以可以通过二分优化

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
inline int read()
{
int f=,ans=;char c;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
struct node{
int l,r,minn;
}x[],st[];
int flag[],n,q,maxn,inf=(int)<<;
bool cmp(node x1,node x2){return x1.minn>x2.minn;}
void pushdown(int k,int l,int r){
if(!flag[k]) return;
flag[k<<]=flag[k<<|]=;
flag[k]=;return;
}
void update(int k,int l,int r,int x,int y){
// cout<<x<<" "<<y<<endl;
if(x<=l&&r<=y){flag[k]=;return;}
pushdown(k,l,r);
int mid=l+r>>;
if(x<=mid) update(k<<,l,mid,x,y);
if(mid<y) update(k<<|,mid+,r,x,y);
flag[k]=flag[k<<]&flag[k<<|];
return;
}
int query(int k,int l,int r,int x,int y){
if(x<=l&&r<=y) return flag[k];
pushdown(k,l,r);
int mid=l+r>>;
int kkk=;
if(x<=mid) kkk&=query(k<<,l,mid,x,y);
if(mid<y) kkk&=query(k<<|,mid+,r,x,y);
flag[k]=flag[k<<]&flag[k<<|];
return kkk;
}
bool check(int len){
// cout<<"len:"<<len<<endl;return 0;
memset(flag,,sizeof(flag));
for(int i=;i<=len;i++) st[i]=x[i];
sort(st+,st+len+,cmp);
int j;
for(int i=;i<=len;i=j+){
j=i;
while(j<=len&&st[j].minn==st[i].minn) j++;--j;
int l1=inf,r1=inf,l2=,r2=;
for(int k=i;k<=j;k++){ l1=min(l1,st[k].l);l2=max(l2,st[k].l);
r1=min(r1,st[k].r),r2=max(r2,st[k].r);
}
if(l2>r1) return ;
if(query(,,n,l2,r1)) return ;
update(,,n,l1,r2);
}return ;
}
signed main()
{
n=read(),q=read();
for(int i=;i<=q;i++) {
x[i].l=read(),x[i].r=read(),x[i].minn=read();
}
int l=,r=q,mid;
while(l<=r){
mid=l+r>>;
if(check(mid)) maxn=max(maxn,mid),l=mid+;
else r=mid-;
}
if(maxn!=q) cout<<maxn+;
else cout<<;
}

[bzoj 1594]猜数游戏的更多相关文章

  1. 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)

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

  2. BZOJ 1594 [Usaco2008 Jan]猜数游戏(线段数)

    1594: [Usaco2008 Jan]猜数游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 626  Solved: 260[Submit][S ...

  3. bzoj 1594: [Usaco2008 Jan]猜数游戏——二分+线段树

    Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面摆N(1 <= N<= 1,000,00 ...

  4. BZOJ 1594: [Usaco2008 Jan]猜数游戏 线段树 + 思维 + 二分

    Code: #include<bits/stdc++.h> #define maxn 3000000 using namespace std; void setIO(string s) { ...

  5. BZOJ 2222: [Cqoi2006]猜数游戏【神奇的做法,傻逼题,猜结论】

    2222: [Cqoi2006]猜数游戏 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 604  Solved: 260[Submit][Status ...

  6. 【bzoj1594】猜数游戏

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

  7. usaco 猜数游戏

    Description 为了提高智商,锻炼思维能力,奶牛设计了一个猜数游戏.游戏开始前,贝西会在牛棚后面摆上N个数字.所有数字排成一条直线,按次序从1到N编号.每个数字在1到10^9之间,没有两个数字 ...

  8. (一)Python之猜数游戏

    猜数游戏由简如深的编码学习过程: 3次机会: print('------------------我爱鱼C工作室------------------')count=0while count < 3 ...

  9. 猜数游戏-flag的运用

    package my;import java.util.Scanner;public class MyJava {        public static void main(String[] ar ...

随机推荐

  1. Siki_Unity_1-3_Unity零基础入门_古迹探险

    1-3 Unity零基础入门 古迹探险 任务1/2:资料下载 链接:https://pan.baidu.com/s/1jHVymNk 密码:rbob 任务3:工程的创建和打开 Project:古迹探险 ...

  2. 现实世界中的 Python

    Python 有多稳定? 非常稳定. 自 1991 年起大约每隔 6 到 18 个月就会推出新的稳定发布版,这种状态看来还将持续下去. 目前主要发布版本的间隔通常为 18 个月左右. 开发者也会推出旧 ...

  3. Python变量常量及注释

    一.变量命名规则1.有字母.数字.下划线搭配组合而成2.不能以数字开头,更不能全为数字3.不能用Python的关键字4.不要太长5.名字要有意义6.不要用中文7.区分大小写8.采用驼峰体命名(多个单词 ...

  4. C Program基础-二维数组

    一维数组可以看作一行连续的数据,只有一个下标.C语言允许构造二维数组甚至多维数组,在实际问题中有时候常常需要用到二维数组(例如数学上的矩阵),二维数组有两个下标,以确定某个元素在数组中的位置. (一) ...

  5. allocator类

    一.动态数组 [new的局限性] new将内存分配和对象构造组合在一起,同样delete将对象析构和内存释放组合在一起 我们分配单个对象时,通常希望将内存分配和对象初始化组合在一起(我们知道对象应有什 ...

  6. iOS音频播放概述

    在iOS系统中apple对音频播放需要的操作进行了封装并提供了不同层次的接口 下面对其中的中高层接口进行功能说明: Audio File Services:读写音频数据,可以完成播放流程中的第2步: ...

  7. TCP系列19—重传—9、thin stream下的重传

    一.介绍 当TCP连续大量的发送数据的时候,当出现丢包的时候可以有足够的dup ACK来触发快速重传.但是internet上还有大量的交互式服务,这类服务一般都是由小包组成,而且一次操作中需要传输的数 ...

  8. OSG学习:使用已有回调示例

    回调的类型有很多种,一般很容易就想到的是UpdateCallBack,或者EventCallBack,回调的意思就是说,你可以规定在某件事情发生时启动一个函数,这个函数可能做一些事情.这个函数就叫做回 ...

  9. PAT 甲级 1048 Find Coins

    https://pintia.cn/problem-sets/994805342720868352/problems/994805432256675840 Eva loves to collect c ...

  10. position定位-absolute与fixed

    1. absolute 生成绝对定位元素,相对于static定位以外的第一个父元素进行定位. 2. fixed 生成绝对定位元素,相对于浏览器窗口进行定位.