大佬博客 https://www.cnblogs.com/zinthos/p/3899565.html

题目:https://codeforces.com/problemset/problem/1080/F

题目大意:

  给你k个线段,每个线段属于一个集合(n),每次查询a,b,x,y,求[a,b]的集合是否都存在一个区间[l,r]使得l<=x&&r>=y

解法:

  题目等同于,对于[a,b]中的每一个集合,左端点大于x的线段中最小的右端点,的最大值是否<=y;

  对线段排序(根据左端点l值),根据线段左端点值l由大到小依次插入更新线段树(插入时维护最小值),线段树维护[1,n]上的最大的区间右端点值(所有的 集合的最小右端点 的最大值),每次更新需要复制的节点数最多为log个,端点数最多为nlogn

#include<bits/stdc++.h>
using namespace std;
#define freread freopen("input.txt","r",stdin);
#define frewrite freopen("output.txt","w",stdout);
typedef long long ll;
const int maxn=3e5+;
const int inf=(1LL<<)-;
int n,m,k,ar[maxn];
struct node{
int l,r,mx;
}no[];
struct data{
int l,r,v;
operator < (const data& other){
return l<other.l;
}
void prin(){
cout<<"da = "<<l<<" "<<r<<" "<<v<<endl;
}
}da[maxn];
int root[maxn],tot=;
void newNode(int& u,int p){
u=++tot;
no[u]=no[p];
}
void push(int x){
no[x].mx=max(no[no[x].l].mx , no[no[x].r].mx);
}
void build(int l,int r,int &o){
newNode(o,);
if(l==r){
no[o].mx=inf;
return ;
}
int mid=l+r>>;
build(l,mid,no[o].l);
build(mid+,r,no[o].r);
push(o);
}
void ensert(int l,int r,int& o,int pre,int a,int b){
newNode(o,pre);
if(l==r){
no[o].mx=min(no[o].mx, b);
return ;
}
int mid=l+r>>;
if(a<=mid)ensert(l,mid,no[o].l,no[o].l,a,b);
else ensert(mid+,r,no[o].r,no[o].r,a,b);
push(o);
}
int que(int l,int r,int o,int a,int b){
if(l==a && r==b){
return no[o].mx;
}
int mid=l+r>>;
int ans=;
if(a<=mid)ans=max(ans, que(l,mid,no[o].l,a,min(b,mid)));
if(b>mid)ans=max(ans, que(mid+,r,no[o].r,max(a,mid+),b));
return ans;
}
int findpos(int x){
int l=,r=k+;
while(l<r){
int mid=(l+r)>>;
if(da[mid].l>=x)r=mid;
else l=mid+;
}
return l;
} int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=k;i++){
scanf("%d%d%d",&da[i].l,&da[i].r,&da[i].v);
}
sort(da+,da+k+);
build(,n,root[k+]);
for(int i=k;i>=;i--){
ensert(,n,root[i],root[i+],da[i].v,da[i].r);
}
da[k+].l=1e9+;
while(m--){
int a,b,x,y;
scanf("%d%d%d%d",&a,&b,&x,&y);
int ans=que(,n,root[findpos(x)],a,b);
puts(ans<=y? "yes":"no");
fflush(stdout);
}
return ;
}

可持久化线段树(cf1080F)的更多相关文章

  1. PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树

    #44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...

  2. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

  3. 【BZOJ-2653】middle 可持久化线段树 + 二分

    2653: middle Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1298  Solved: 734[Submit][Status][Discu ...

  4. HDU 4866 Shooting(持久化线段树)

    view code//第二道持久化线段树,照着别人的代码慢慢敲,还是有点不理解 #include <iostream> #include <cstdio> #include & ...

  5. 【BZOJ-3653】谈笑风生 DFS序 + 可持久化线段树

    3653: 谈笑风生 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 628  Solved: 245[Submit][Status][Discuss] ...

  6. 【BZOJ3673】&&【BZOJ3674】: 可持久化并查集 by zky 可持久化线段树

    没什么好说的. 可持久化线段树,叶子节点存放父亲信息,注意可以规定编号小的为父亲. Q:不是很清楚空间开多大,每次询问父亲操作后修改的节点个数是不确定的.. #include<bits/stdc ...

  7. 【BZOJ3207】花神的嘲讽计划I 可持久化线段树/莫队

    看到题目就可以想到hash 然后很自然的联想到可持久化权值线段树 WA:base取了偶数 这道题还可以用莫队做,比线段树快一些 可持久化线段树: #include<bits/stdc++.h&g ...

  8. 【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之

    最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...

  9. 【BZOJ 3524】【Poi2014】Couriers 可持久化线段树

    为什么这个主席树叫可持久化线段树,我不知道,具体得问达神.我无限T,然后DaD3zZ一针见血地指出了我的N*50爆内存导致无限编译超时O)ZO)ZO)Z真是太神啦.以图为鉴: 达神题解传送门:http ...

  10. BZOJ-3524 Couriers 可持久化线段树

    可持久化线段树,其实就是类主席树了.. 3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1124 Sol ...

随机推荐

  1. jsp05 指令与动作

    JSP7个动作指令如下 : jsp:forward: 执行页面转向,将请求的处理转发到下一个页面. jsp:param: 用于传递参数,必须与其他支持参数曲标签一起使用. jsp:include: 用 ...

  2. mysql 索引 和mysql 的引擎

    1.索引的特点 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度. ...

  3. Windows下端口占用查看

    假如我们需要确定谁占用了我们的80端口 1.Windows平台在windows命令行窗口下执行:C:\>netstat -aon|findstr "80" TCP     1 ...

  4. Problem B. Harvest of Apples(杭电2018年多校+组合数+逆元+莫队)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6333 题目: 题意:求C(n,0)+C(n,1)+……+C(n,m)的值. 思路:由于t和n数值范围太 ...

  5. ajax中datatype的json和jsonp

     前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域 ...

  6. JAVA Frame 响应窗口关闭事件

    /* * To change this license header, choose License Headers in Project Properties. * To change this t ...

  7. quartz的简介

    1. 介绍  Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源的任务调度框架,是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预 ...

  8. 【目录】Python模块学习系列

    目录:Python模块学习笔记 1.Python模块学习 - Paramiko  - 主机管理 2.Python模块学习 - Fileinput - 读取文件 3.Python模块学习 - Confi ...

  9. 广度优先搜索--POJ迷宫问题

    Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, ...

  10. 【LOJ2254】SNOI2017一个简单的询问

    莫队,每次询问的是两个区间,就把区间拆开,分开来算就好了. 借鉴了rank1大佬的玄学排询问的姿势. #include<bits/stdc++.h> #define N 50010 typ ...