Codeforces Round #524 (Div. 2) F. Katya and Segments Sets(主席树)
https://codeforces.com/contest/1080/problem/F
题意
有k个区间,区间的种类有n种,有m个询问(n,m<=1e5,k<=3e5),每次询问a,b,x,y,代表对于种类编号为[a,b]的每一种区间,是否都存在一个区间x<=l,r<=y,输出yes or no
思路
- 现将区间按左端点从小到大排序,对于每一个询问首先找出第一个左端点大于x的区间,然后看[a,b]中最大的右端点是否>y即可
- 需要一颗以种类编号为下标,右端点为权值的主席树,维护种类[a,b]的最大右端点值
- 假如找出了第一个左端点大于x的区间,怎么知道后面的区间的左端点一定<=y?
- 因为每个种类上的点记录的是本种类点的最小右端点,假如左端点>y,则这个区间的右端点一定大于>y,所以不用担心这一类区间会被计算在内
- 怎么保证本种类左端点>=x的区间,最小的右端点一定>=x?
- 排好序后,反着建树
#include<bits/stdc++.h>
#define M 300005
#define inf 0x3f3f3f3f
using namespace std;
int st[M],ma[M],rt[M*40],ls[M*40],rs[M*40],vl[M*40];
int pos,n,m,k,i,a,b,x,y,cnt,ans;
struct N{
int l,r,p;
}p[M];
bool cmp(N a,N b){
return a.l<b.l;
}
void ud(int pre,int &o,int l,int r,int pos,int val){
if(pre==o){o=++cnt;ls[o]=ls[pre];rs[o]=rs[pre];}
if(l==r){vl[o]=val;return;}
int mid=(l+r)/2;
if(pos<=mid)ud(ls[pre],ls[o],l,mid,pos,val);
else ud(rs[pre],rs[o],mid+1,r,pos,val);
vl[o]=max(vl[ls[o]],vl[rs[o]]);
}
int qy(int o,int l,int r,int L,int R){
int mid=(l+r)/2;
if(!o)return inf;
if(L<=l&&r<=R)return vl[o];
if(R<=mid)return qy(ls[o],l,mid,L,R);
if(L>mid)return qy(rs[o],mid+1,r,L,R);
return max(qy(ls[o],l,mid,L,R),qy(rs[o],mid+1,r,L,R));
}
int main(){
cin>>n>>m>>k;
memset(ma,inf,sizeof(ma));vl[0]=inf;
for(i=1;i<=k;i++)scanf("%d%d%d",&p[i].l,&p[i].r,&p[i].p);
sort(p+1,p+k+1,cmp);
for(i=1;i<=k;i++)st[i]=p[i].l;
st[k+1]=inf;
for(i=k;i>=1;i--){
rt[i]=rt[i+1];
if(ma[p[i].p]>p[i].r){
ud(rt[i+1],rt[i],1,n,p[i].p,p[i].r);
ma[p[i].p]=p[i].r;
}
}
for(i=0;i<m;i++){
scanf("%d%d%d%d",&a,&b,&x,&y);
pos=lower_bound(st+1,st+k+2,x)-st;
if(pos==k+1)ans=inf;
else ans=qy(rt[pos],1,n,a,b);
if(ans<=y)printf("yes\n");else printf("no\n");
fflush(stdout);
}
}
Codeforces Round #524 (Div. 2) F. Katya and Segments Sets(主席树)的更多相关文章
- Codeforces Round #523 (Div. 2) F. Katya and Segments Sets (交互题+思维)
https://codeforces.com/contest/1061/problem/F 题意 假设存在一颗完全k叉树(n<=1e5),允许你进行最多(n*60)次询问,然后输出这棵树的根,每 ...
- Codeforces Round #524 (Div. 2) F
题解: 首先这个东西因为强制在线区间查询 所以外面得套线段树了 然后考虑几条线段怎么判定 我们只需要按照右端点排序,然后查询的时候查找最右节点的前缀最大值就可以了 然后怎么合并子区间信息呢 (刚开始我 ...
- Codeforces Round #271 (Div. 2) F. Ant colony (RMQ or 线段树)
题目链接:http://codeforces.com/contest/474/problem/F 题意简而言之就是问你区间l到r之间有多少个数能整除区间内除了这个数的其他的数,然后区间长度减去数的个数 ...
- Codeforces Round #271 (Div. 2) F题 Ant colony(线段树)
题目地址:http://codeforces.com/contest/474/problem/F 由题意可知,最后能够留下来的一定是区间最小gcd. 那就转化成了该区间内与区间最小gcd数相等的个数. ...
- Codeforces Round #530 (Div. 2)F Cookies (树形dp+线段树)
题:https://codeforces.com/contest/1099/problem/F 题意:给定一个树,每个节点有俩个信息x和t,分别表示这个节点上的饼干个数和先手吃掉这个节点上一个饼干的的 ...
- Codeforces Round #276 (Div. 1) E. Sign on Fence 二分+主席树
E. Sign on Fence Bizon the Champion has recently finished painting his wood fence. The fence consi ...
- Codeforces Round #485 (Div. 2) F. AND Graph
Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...
- Codeforces Round #486 (Div. 3) F. Rain and Umbrellas
Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...
- Codeforces Round #501 (Div. 3) F. Bracket Substring
题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...
随机推荐
- ASP.Net MVC 中a标签的onclick时间和href同时存在时候的处理
问题出现: 本次项目在用到下载文件.导出文件的时候,需要在下载.导出之前进行判断,最初使用方式一.二,没能解决问题 方式一:使用href直接跳转controller方法,以下载为例: public A ...
- 微信小程序开发——全局配置详细介绍
本文针对官方文档未说明清楚的进行详细探索研究,官方文档详见:全局配置 . pages: 删除页面,需要先删除app.json中pages对应页面的路径,再去删除页面相关的所有文件,不然会出现页面文件混 ...
- f5 2017.09.03故障
1.下午14点50左右有同事反应epm等系统登录有问题.自测登录也是有同样的报错. 2.测试发现内部IP直接访问正常,但是访问f5的vip的方式访问不了.此时oa.邮件等系统也开始有同事发现故障. 3 ...
- Djang的model创建的字段和参数复习
class test_orm(models.Model): id = models.AutoField(primary_key=True) # int自增列,必须填入参数primary_key=Tru ...
- Centos和Redhat的区别与联系
CentOS的简介 CentOS是Community ENTerprise Operating System的简称,我们有很多人叫它社区企业操作系统,不管你怎么叫它,它都是Linux操作系统的一个发行 ...
- PHP统计网站pv(访问量)
//首先判断有没有统计的文件 if(is_file("pv.txt")){//有 //取文件里面的值 $count=file_get_contents("pv.txt&q ...
- ubuntu远程桌面、VNC(转载)
VNC 远程桌面 配置/使用 for xfce 本贴主要目的为说明如何在windows系统下远程控制xfce桌面 Ubuntu 的默认GNOME桌面可以在系统设置中直接打开远程桌面,然后用Window ...
- 应用内直接跳转到Appstore
iOS开发中,应用内直接跳转到Appstore .进入appstore中指定的应用 NSString *str = [NSString stringWithFormat: @"itms:// ...
- ubuntu12.04下安装Apache+PHP+MySQL
一.Apache1.安装apache2: sudo apt-get install apache2 2.重启apache2: sudo /etc/init.d/apache2 restart 3.在浏 ...
- CURLOPT_RETURNTRANSFER
curl_setopt($ch,CURLOPT_RETURNTRANSFER,);//设置返回值不直接输出,例如返回xml格式,会将xml原样输出