BUAA 724 晴天小猪的神题(RMQ线段树)
BUAA 724 晴天小猪的神题
题意:中文题,略
题目链接:http://acm.buaa.edu.cn/problem/724/
思路:对于询问x,y是否在同一区间,可以转换成有没有存在一个区间它的左端点小于等于x,右端点大于等于y
即小于等于x的所有区间的右端点的最大值是否大于y!这就转换成了区间最值问题,可以用线段树动态维护左端点即可
(x,y太大,可先离散化)
# include<cstdio>
# include<cstring>
# include<map>
# include<algorithm>
using namespace std; typedef pair<int,int> PII;
# define lson l,m,rt<<
# define rson m+,r,rt<<|
# define F first
# define S second
# define N
pair<int,PII> q[N]; int Max[N<<];
int Hash[N]; void PushUp(int rt)
{
Max[rt]=max(Max[rt<<],Max[rt<<|]);
} void Update(int pos,int x,int l,int r,int rt)
{
int m;
if(l==r)
{
Max[rt]=max(Max[rt],x);
return;
}
m=(l+r)>>;
if(pos<=m) Update(pos,x,lson);
else Update(pos,x,rson);
PushUp(rt);
} //查询[L,R]内的最大值
int Query(int L,int R,int l,int r,int rt)
{
int m,ans=;
if(L<=l&&R>=r)
return Max[rt];
m=(l+r)>>;
if(L<=m) ans=max(ans,Query(L,R,lson));
if(R>m) ans=max(ans,Query(L,R,rson));
return ans;
} int bin(int l,int r,int x)
{
int m;
while(l<=r)
{
m=(l+r)>>;
if(Hash[m]<x) l=m+;
else r=m-;
}
return l;
} int main()
{
int T,i,n,x,y,num,Count,L,R;
scanf("%d",&T);
while(T--)
{
Count=;
scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%d%d%d",&q[i].F,&q[i].S.F,&q[i].S.S);
Hash[++Count]=q[i].S.F;
Hash[++Count]=q[i].S.S;
}
sort(Hash+,Hash+Count+);
num=;
for(i=;i<=Count;i++)
if(Hash[i]!=Hash[i-])
Hash[++num]=Hash[i];
memset(Max,,sizeof(Max));
for(i=;i<=n;i++)
{
L=bin(,num,q[i].S.F);
R=bin(,num,q[i].S.S);
if(q[i].F==) Update(L,R,,num,);
else
{
if(L>R) swap(L,R);
if(Query(,L,,num,)>=R)
printf("YES\n");
else
printf("NO\n");
}
}
}
return ;
}
BUAA 724
BUAA 724 晴天小猪的神题(RMQ线段树)的更多相关文章
- NBU 2475 Survivors(RMQ线段树)
NBU 2475Survivors 题目链接:http://acm.nbu.edu.cn/v1.0/Problems/Problem.php?pid=2475 题意:给定n个人,每个人有strengt ...
- Codeforces Round #305 (Div. 2) D题 (线段树+RMQ)
D. Mike and Feet time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- ACM学习历程—HDU5696 区间的价值(分治 && RMQ && 线段树 && 动态规划)
http://acm.hdu.edu.cn/showproblem.php?pid=5696 这是这次百度之星初赛2B的第一题,但是由于正好打省赛,于是便错过了.加上2A的时候差了一题,当时有思路,但 ...
- poj2763(lca / RMQ + 线段树)
题目链接: http://poj.org/problem?id=2763 题意: 第一行输入 n, q, s 分别为树的顶点个数, 询问/修改个数, 初始位置. 接下来 n - 1 行形如 x, y, ...
- CSU1553 Good subsequence —— 二分 + RMQ/线段树
题目链接: http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1553 Description Give you a sequence of n n ...
- UESTC 764 失落的圣诞节 --RMQ/线段树
题意:n种物品,每种物品对不同的人都有不同的价值,有三个人选,第一个为普通学生,第二个是集,第三个是祈,集和祈可以选一样的,并且还会获得加分,集和祈选的普通学生都不能选,问三个人怎样选才能使总分最高. ...
- [RMQ] [线段树] POJ 3368 Frequent Values
一句话,多次查询区间的众数的次数 注意多组数据!!!! RMQ方法: 预处理 i 及其之前相同的数的个数 再倒着预处理出 i 到不是与 a[i] 相等的位置之前的一个位置, 查询时分成相同的一段和不同 ...
- VJ16216/RMQ/线段树单点更新
题目链接 /* 单点更新,用RMQ维护最大值,add对c[i]修改,或加,或减. 求[l,r]的和,用sum(r)-sum(l-1).即可. */ #include<cmath> #inc ...
- 51Nod.1766.树上最远点对(树的直径 RMQ 线段树/ST表)
题目链接 \(Description\) 给定一棵树.每次询问给定\(a\sim b,c\sim d\)两个下标区间,从这两个区间中各取一个点,使得这两个点距离最远.输出最远距离. \(n,q\leq ...
随机推荐
- C语言实现统计字符个数
#include<stdio.h> int main() { int sz[10]={0},zm[26]={0},z[26]={0},i,space=0,e=0,t=0; ...
- java入门第二步之helloworld【转】
前一篇博客已经介绍了jdk的安装:接下来我们就乘热打铁,完成第一个程序:helloworld(每学一样程序的新东西都是从实现helloworld开始的) 1.不是用开发工具IDE,只是使用记事本来实现 ...
- 常见JS(JavaScript)冲突解决方法
1.一般JS冲突解决办法 a.最容易出现的就是js的命名冲突 ①.变量名冲突 变量有全局变量和局部变量当全局变量变量和局部变量名称一致时,就会js冲突,由于变量传递数值或地址不同就会产生JavaScr ...
- MongoDB Aggregate Methods(2) MonoDB 的 3 种聚合函数
aggregate(pipeline,options) 指定 group 的 keys, 通过操作符 $push/$addToSet/$sum 等实现简单的 reduce, 不支持函数/自定义变量 g ...
- node cheerio
所谓工欲善其事,必先利其器,所以通读了cheerio的API,顺便翻译了一遍,有些地方因为知道的比较少,不知道什么意思,保留了英文,希望各位不吝告诉我,然后一起把这个翻译完成. ###cheerio ...
- Windows系统安装时间
http://www.45it.com/windowszh/201206/30693.htm 修改系统安装时间 开始" - "运行" - 输入"regedit& ...
- HDU 2594 扩展kmp模板题
题目大意: 给定两个字符串,在第一个字符串中找到一个最大前缀作为第二个字符串的后缀 #include <iostream> #include <cstdio> #include ...
- 结构化视角看django
分析一个软件的整体框架,我认为应该从静态和动态两方面入手.静态方面,看它有哪些用例,即有哪些功能模块:动态方面,看主流程如何连接上这些模块 静态方面:分View.Model.Template.Sess ...
- 【转】./configure && make && make install详解
在Linux中利用源码包安装软件最重要的就是要仔细阅读安装包当中的README INSTALL两个说明文件,这两个文件会清楚的告诉你如何可以正确的完成这个软件的安装! 我们都知道源 ...
- [windows操作系统]windows模块
smss.exe csrss.exe Client/Server Runtime Server Subsystem