题意

一个长度为 \(n\) 的序列,每个权值互不相同,给出形如 \(l,r,p\) 的信息表示 \([l,r]\) 区间中最小的数是 \(p\) ,问第几个信息开始出现矛盾。

\(n\leq 5 \times 10^5\) .

分析

  • 二分答案再判前 \(mid\) 个信息是否合法。

  • 相同 \(p\) 的区间的 \(p\) 一定出现在这些区间的交中。

  • 分析出现矛盾的两种情况:

    • 相同权值的区间没有交集

    • 相同权值的区间有交集,但是这些位置一定要填 \(>p\) 的数

  • 考虑将区间按照权值从大到小排序,每次处理一种权值 \(p\) ,计算出交之后观察能不能在交区间中找到一个位置来放置 \(p\) 。

  • 接着再将并区间打上标记表示不能有 \(< p\) 的数出现在这个区间中。

  • 总时间复杂度为 \(O(n log^2n)\)。

代码

#include<bits/stdc++.h>
using namespace std;
#define go(u) for(int i=head[u],v=e[i].to;i;i=e[i].last,v=e[i].to)
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
#define Ls o<<1
#define Rs o<<1|1
typedef long long LL;
inline int gi(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-48;ch=getchar();}
return x*f;
}
template<typename T>inline bool Max(T &a,T b){return a<b?a=b,1:0;}
template<typename T>inline bool Min(T &a,T b){return b<a?a=b,1:0;}
const int N=5e5 + 7,inf=0x3f3f3f3f;
int n,q;
int par[N];
int getpar(int a){return par[a]==a?a:par[a]=getpar(par[a]);}
struct data{
int l,r,v;
data(){}data(int l,int r,int v):l(l),r(r),v(v){}
bool operator <(const data &rhs)const{
return v>rhs.v;
}
}t[N],d[N];
bool check(int mid){
rep(i,1,mid) t[i]=d[i];
sort(t+1,t+1+mid);
rep(i,1,n) par[i]=i;
for(int i=1,j=1;i<=mid;i=j+1,j=i){
int l=t[i].l,r=t[i].r,L=t[i].l,R=t[i].r;
while(j+1<=mid&&t[j+1].v==t[j].v){
++j;
Max(l,t[j].l);Min(r,t[j].r);
Min(L,t[j].l);Max(R,t[j].r);
}
if(l>getpar(r)) return 0;
while(L<=R){
if(getpar(R)==R) par[R]=getpar(L-1),--R;
else R=getpar(R);
}
}
return 1;
}
int main(){
n=gi(),q=gi();
rep(i,1,q) d[i].l=gi(),d[i].r=gi(),d[i].v=gi();
int l=1,r=q;
while(l<r){
int mid=l+r+1>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
printf("%d\n",l+1);
return 0;
}

最新文章

  1. python3 字符串与列表常用功能
  2. javascript base64 字符转换
  3. PHP在yii2中封装SuperSlide 幻灯片编写自己的SuperSlideWidget的例子
  4. 随机生成数字(ashx文件,调用上篇所写发送邮件代码)
  5. Linux网卡bounding详解
  6. 分页进阶--ajax+jquery+struts2
  7. Servlet过滤器和监听器
  8. bzoj1193
  9. 未能找到类型或命名空间“Compare”
  10. OneAlert 入门(一)——事件流
  11. ios 常用字符串NSString的操作
  12. VS2010安装与测试编译问题(fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt)
  13. c#操作MySQL数据库中文出现乱码(很多问号)的解决方法
  14. 【智能家居篇】wifi网络访问原理(下一个)——联想Association
  15. 玩玩微信公众号Java版之三:access_token及存储access_token
  16. Nokia大事录
  17. Java (六、String类和StringBuffer)
  18. idea 控制到不能输出中文
  19. HTML5-canvas-基础篇
  20. Oracle数据重复,只取一条

热门文章

  1. 从ibd文件获取表空间id
  2. 处理 Windows 虚拟机的计划内维护通知
  3. 【转】VMware虚拟机三种网络模式超详解
  4. 乘风破浪:LeetCode真题_032_Longest Valid Parentheses
  5. Alpha冲刺报告(4/12)(麻瓜制造者)
  6. Python接口自动化--requests 2
  7. 2-7 R语言基础 数据框
  8. HtmlUnit
  9. pyspider爬取数据存入redis--2.测试数据库连通性
  10. [转]在C++中容易出现的#error No Target Architecture