YYHS-猜数字(并查集/线段树维护)
题目描述
输入
接下来T行,每行三个数分别表示li,ri和xi。
输出
样例输入
1 10 7
5 19 7
3 12 8
1 20 1
样例输出
提示
题解
这道题我们先考虑矛盾的情况
我们不难发现有以下两种情况是矛盾的
1.当一个区间覆盖了另一个区间且大的区间的x值比另一个区间的x值小的时候是矛盾的
2.当两个区间的x值相同时,如果这两个区间没有交集,这也是矛盾的
知道了矛盾的情况后
我们可以二分矛盾的句子的位置
将前k个句子按x值从大到小排个序,然后我们枚举,判断当前区间的x值和前一个区间的x值是否相同
如果相同,就判断一下有没有交集
如果不相同,我们可以维护一个线段树,将交集的区间覆盖为1,查询并集的区间是否被覆盖为1,当然我们也可以用并查集来维护,我是用并查集来做的,但还是感觉线段树应该好懂一些(虽然代码长了些)
#include<bits/stdc++.h>
#define N 1000005
using namespace std;
int n,T,cnt;
int fa[N];
struct node{
int l,r,x;
}a[N],b[N];
bool cmp(node x,node y){ return x.x>y.x; }
int find(int x){ if (x!=fa[x]) fa[x]=find(fa[x]); return fa[x]; }
bool check(int x){
int f1,f2;
for (int i=;i<=n+;i++) fa[i]=i;
for (int i=;i<=x;i++) b[i]=a[i];
sort(b+,b++x,cmp);
int lmin=b[].l,lmax=b[].l,rmin=b[].r,rmax=b[].r;
for (int i=;i<=x;i++){
if (b[i].x<b[i-].x){
f1=find(lmax);
if (f1>rmin) return true;//判断是否有大于b[i].x的区间覆盖了
f2=find(rmax+);
for (int j=find(lmin);j<=rmax;j++){
f1=find(j);
fa[f1]=f2;
}
lmin=lmax=b[i].l;
rmin=rmax=b[i].r;
} else{
lmin=min(lmin,b[i].l);
lmax=max(lmax,b[i].l);
rmin=min(rmin,b[i].r);
rmax=max(rmax,b[i].r);
if (lmax>rmin) return true;//判断是否有交集
}
}
f1=find(lmax);
if (f1>rmin) return true;
return false;
}
int main(){
scanf("%d%d",&n,&T);
for (int i=;i<=T;i++)
scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].x);
int l=,r=T;
int ans=T+;
while (l<=r){
int mid=(l+r)>>;
if (check(mid)){
ans=mid;
r=mid-;
} else l=mid+;
}
printf("%d\n",ans);
return ;
}
YYHS-猜数字(并查集/线段树维护)的更多相关文章
- UVA1455 - Kingdom(并查集 + 线段树)
UVA1455 - Kingdom(并查集 + 线段树) 题目链接 题目大意:一个平面内,给你n个整数点,两种类型的操作:road x y 把city x 和city y连接起来,line fnum ...
- 并查集&线段树&树状数组&排序二叉树
超级无敌巨牛逼并查集(带权并查集)https://vjudge.net/problem/UVALive-4487 带删点的加权并查集 https://vjudge.net/problem/UVA-11 ...
- 【Codeforces576E_CF576E】Painting Edges(可撤销并查集+线段树分治)
题目 CF576E 分析: 从前天早上肝到明天早上qwq其实颓了一上午MC ,自己瞎yy然后1A,写篇博客庆祝一下. 首先做这题之前推荐一道很相似的题:[BZOJ4025]二分图(可撤销并查集+线段树 ...
- BZOJ 3910 并查集+线段树合并
思路: 1. 并查集+线段树合并 记得f[LCA]==LCA的时候 f[LCA]=fa[LCA] 2.LCT(并不会写啊...) //By SiriusRen #include <cstdio& ...
- luogu5012 水の数列 (并查集+线段树)
如果我们能求出来每个区间个数的最大分值,那就可以用线段树维护这个东西 然后出答案了 然后这个的求法和(luogu4269)Snow Boots G非常类似,就是我们把数大小排个序,每次都拿<=x ...
- Vladik and Entertaining Flags CodeForces - 811E (并查集,线段树)
用线段树维护每一块左右两侧的并查集, 同色合并时若不连通则连通块数-1, 否则不变 #include <iostream> #include <algorithm> #incl ...
- bzoj2733 / P3224 [HNOI2012]永无乡(并查集+线段树合并)
[HNOI2012]永无乡 每个联通块的点集用动态开点线段树维护 并查集维护图 合并时把线段树也合并就好了. #include<iostream> #include<cstdio&g ...
- 【离线 撤销并查集 线段树分治】bzoj1018: [SHOI2008]堵塞的交通traffic
本题可化成更一般的问题:离线动态图询问连通性 当然可以利用它的特殊性质,采用在线线段树维护一些标记的方法 Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常 ...
- [SCOI2011]棘手的操作(可并堆/并查集/线段树)
我懒死了 过于棘手 但这题真的很水的说 毕竟写啥都能过 常见思路: ①:由于不强制在线,所以重新编号之后线段树维护 ②:用各种可以高速合并的数据结构,比如可并堆,可并平衡树啥的 讲一种无脑算法: 对于 ...
随机推荐
- [07] String字符串
1.相同又不同的字符串 String str1 = new String("String"); String str2 = "String"; String s ...
- .net异步性能测试(包括ASP.NET MVC WebAPI异步方法)
很久没有写博客了,今年做的产品公司这两天刚刚开了发布会,稍微清闲下来,想想我们做的产品还有没有性能优化空间,于是想到了.Net的异步可以优化性能,但到底能够提升多大的比例呢?恰好有一个朋友正在做各种语 ...
- geotrellis使用(三十四)矢量瓦片技术研究——矢栅一体化
前言 本文所涉及技术与Geotrellis并无太大关系,仅是矢量瓦片前端渲染和加载技术,但是其实我这是在为Geotrellis的矢量瓦片做铺垫.很多人可能会说,Geotrellis为什么要搞矢量瓦片, ...
- Matlab入门学习(矩阵、函数、绘图的基本使用)
一.矩阵 1.定义和简单使用(一般的编程语言,数组下标都是从0开始的,但是MATLAB是从1开始的) >> a=[ ; ; ] a = >> b=[ ; ; ]; >&g ...
- Apache Spark 2.2.0 中文文档 - SparkR (R on Spark) | ApacheCN
SparkR (R on Spark) 概述 SparkDataFrame 启动: SparkSession 从 RStudio 来启动 创建 SparkDataFrames 从本地的 data fr ...
- [js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)
接着上文线条样式[js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)继续. canvas提供两种输出文本的方 ...
- Postman高级应用——流程控制、调试、公共函数、外部数据文件
postman客户端下载地址:https://www.getpostman.com/apps 目录 流程控制 调试 公共函数 外部数据文件 流程控制 流程控制简言之就是设置接口的执行顺序,流程控制只有 ...
- 国外支付PayPal
PayPal官网https://www.paypal.com/ PayPal沙箱https://www.sandbox.paypal.com/signin?country.x=US&local ...
- 一步一步带你做WebApi迁移ASP.NET Core2.0
随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...
- 读Zepto源码之IOS3模块
IOS3 模块是针对 IOS 的兼容模块,实现了两个常用方法的兼容,这两个方法分别是 trim 和 reduce . 读 Zepto 源码系列文章已经放到了github上,欢迎star: readin ...