主要是怎么处理矛盾

矛盾的条件有$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<<;
}

最新文章

  1. dos下对mysql的简单操作(linux类似)
  2. HTML5 头部标签定义
  3. 【OpenGL】第二篇 Hello OpenGL
  4. BZOJ1707 : [Usaco2007 Nov]tanning分配防晒霜
  5. php中的curl】php中curl的详细解说
  6. 使用ngin的静态文件下载
  7. PowerShell:Linux程序员喜欢的cmd增强版
  8. 关于CSS reset的思考
  9. 使用navicat连接远程linux的mysql中文显示乱码的问题
  10. 由String的构造方法引申出来的java字符编码
  11. dedecms后台系统基本参数标题
  12. Spring中的@conditional注解
  13. getOrderValue 排序 sql server
  14. django 防止xss攻击标记为安全的二种方法
  15. 微信公众平台开发——为何不能在网页调用微信jsapi?
  16. pylot测试工具环境搭建
  17. 信号基础知识--FFT DFT
  18. swoole 定时器
  19. linux bash基本特性
  20. GitHub 新手教程 三,Git Bash

热门文章

  1. 软件测试工程师必备的SQL语句基础
  2. Jquery获取DOM绑定事件
  3. 初学DirectX(1)
  4. UnityShader - 模拟动态光照特效
  5. linux c语言 fork() 和 exec 函数的简介和用法
  6. 动画效果 ObjectAnimator
  7. Redis+Keepalived高可用方案详细分析
  8. js实现滑动器效果
  9. Python中的__future__
  10. java定时执行任务(一)