1. 程式人生 > >Codeforce Round 524 F 可持久化線段樹

Codeforce Round 524 F 可持久化線段樹

好題 

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
struct SegmentTree{
    int p,l,r,Max;
}T[N*20];
int cnt,R[N],n,m,k;
void insert(int &root,int l,int r,int x,int val){
    T[++cnt]=T[root];
    root=cnt;
    if(l==r){
        T[cnt].Max=max(T[cnt].Max,val);
        return;
    }
    int mid=(l+r)/2;
    if(x<=mid)insert(T[root].l,l,mid,x,val);
    else insert(T[root].r,mid+1,r,x,val);
    T[root].Max=min(T[T[root].l].Max,T[T[root].r].Max);
}
int query(int p,int l,int r,int x,int y){
    if(l>=x&&r<=y)return T[p].Max;
    int mid=(l+r)/2;
    int val=1<<30;
    if(x<=mid)val=min(val,query(T[p].l,l,mid,x,y));
    if(y>mid)val=min(val,query(T[p].r,mid+1,r,x,y));
    return val;
}
struct Interval{
    int l,r,p;
    friend bool operator<(const Interval &a,const Interval &b){return a.r<b.r;}
}A[N];
int main(){
    T[0].Max=-1;
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=k;++i)cin>>A[i].l>>A[i].r>>A[i].p;
    sort(A+1,A+1+k);
    for(int i=1;i<=k;++i)insert(R[i]=R[i-1],1,n,A[i].p,A[i].l);
    while(m--){
        int a,b,x,y;
        cin>>a>>b>>x>>y;
        int l=1,r=k;
        while(l<r){
            int mid=(l+r+1)/2;
            if(A[mid].r>y)r=mid-1;
            else l=mid;
        }
        if(A[l].r>y){
            cout<<"no"<<endl;
            fflush(stdout);
            continue;
        }
        int ans=query(R[l],1,n,a,b);
        if(ans>=x)cout<<"yes"<<endl;
        else cout<<"no"<<endl;
        fflush(stdout);
    }
}

相關推薦

Codeforce Round 524 F 持久化線段

好題  #include<bits/stdc++.h> using namespace std; const int N=3e5+10; struct SegmentTree{ int p,l,r,Max; }T[N*20]; int cnt,R[N],

牛客練習賽34 F little w and Discretization(持久化線段

    猛然發現,過這道題竟然已經是10天前的事情了…… 題意大概就是說給你一個序列,每次詢問把一個區間的數字離散化,問離散化之後與原本數字不相同的數字個數有多少個。這裡有很多個詢問,每個詢問之間相互獨立。 既然是要離散化,我們肯定不能到詢問

持久化線段(主席)模板

spa std nod d+ sin 整理 ostream pan int 比賽時候寫的,這裏整理到這裏 #include <iostream> #include <cstdio> #include <cstring> using

主席持久化線段版)

可持久化線段樹 else init 修改 update 懶惰標記 logs scan amp 求區間和模板 1 struct node{ 2 int l[maxn*20],r[maxn*20]; //區間大小 maxn = 1e5時為20倍,不夠就開4

[poj2104]持久化線段入門題(主席

unique tor oot 入門題 個數 索引 方便 return 出現的次數 解題關鍵:離線求區間第k小,主席樹的經典裸題; 對主席樹的理解:主席樹維護的是一段序列中某個數字出現的次數,所以需要預先離散化,最好使用vector的erase和unique函數,很方便;如

[BZOJ 3551] Peaks 半持久化並查集 持久化線段合並

algorithm roo i++ name def amp merge zoj 可持久化線段樹 實現 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib>

[Luogu 3919]【模板】持久化數組(持久化線段/平衡

ins eset blog sta -s ctime it is put tex Description 如題,你需要維護這樣的一個長度為 N 的數組,支持如下幾種操作 在某個歷史版本上修改某一個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每

持久化數組(持久化線段/平衡

space print align left 版本號 此外 cnblogs include 輸出格式 題目背景 UPDATE : 最後一個點時間空間已經放大 標題即題意 有了可持久化數組,便可以實現很多衍生的可持久化功能(例如:可持久化並查集) 題目描述 如題,你需要維護

聰明的質檢員 [NOIP 2011] [持久化線段]

ora space pla des turn num ans max inf Description 小 T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n個礦石,從 1 到n逐一編號,每個礦石都有自己的重量wi以及價值vi。檢驗礦產的流程是: 1.

【BZOJ4704】旅行 鏈剖分+持久化線段

-s 編號 不能 ets include 出發 oot %d rip 【BZOJ4704】旅行 Description 在Berland,有n個城堡。每個城堡恰好屬於一個領主。不同的城堡屬於不同的領主。在所有領主中有一個是國王,其他的每個領主都直接隸屬於另一位領主,

【BZOJ3681】Arietta 鏈剖分+持久化線段優化建圖+網絡流

des 持久化 -s 過程 void 但是 陽光 建圖 == 【BZOJ3681】Arietta Description Arietta 的命運與她的妹妹不同,在她的妹妹已經走進學院的時候,她仍然留在山村中。但是她從未停止過和戀人 Velding 的書信往來。一天,

bzoj 2588 Spoj 10628. Count on a tree (持久化線段

change lca 權值線段樹 mat sin urn problem sample des Spoj 10628. Count on a tree Time Limit: 12 Sec Memory Limit: 128 MBSubmit: 7669 Solv

【模板】持久化線段 1(主席

base math 一次 數據 mar 指定 das min 第k小 題目背景 這是個非常經典的主席樹入門題——靜態區間第K小 數據已經過加強,請使用主席樹。同時請註意常數優化 題目描述 如題,給定N個正整數構成的序列,將對於指定的閉區間

洛谷P3402 【模板】持久化並查集(持久化線段線段

std 樹節點 https case 深度 build eof spa 復雜度 orz TPLY 巨佬,題解講的挺好的。 這裏重點梳理一下思路,做一個小小的補充吧。 寫可持久化線段樹,葉子節點維護每個位置的fa,利用每次只更新一個節點的特性,每次插入\(logN\)個節點,

[Luogu] 持久化線段 1(主席

tdi ace oid root post space out 節點 nod https://www.luogu.org/problemnew/show/P3834 #include<cstdio> #include<iostream> #

[解題報告]P3919 【模板】持久化數組(持久化線段/平衡

版本 持久化 完全 直接 n) ace 思路 efi mes 題目簡述 維護一個長度為N的數組,支持如下幾種操作: 在某個歷史版本上修改某一個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每進行一次操作(對於操作2,即為生成一個完全一樣的版本,不作任何改動),就會

【XSY2720】區間第k小 整體二分 持久化線段

cpp markdown 區間 序列 printf line 線段 using back 題目描述   給你你個序列,每次求區間第\(k\)小的數。   本題中,如果一個數在詢問區間中出現了超過\(w\)次,那麽就把這個數視為\(n\)。   強制在線。   \(n\leq

【XSY2732】Decalcomania 持久化線段 分治

lin %d == void ret 多少 for size include 題目描述   有一個陶瓷瓶周圍有\(n\)個可以印花的位置。第\(i\)個與第\(i+1\)個位置之間的距離為\(d_i\),在第\(i\)個位置印圖案要\(t_i\)秒。   機器剛開始在\(0

【9018:2208】持久化線段2

body stat lin nbsp return == tro mst tdi 2208: 【模板】可持久化線段樹2 時間限制: 3 Sec 內存限制: 256 MB提交: 30 解決: 12[提交][狀態][討論版] 題目描述 靜態區間第K小問題是典型的主席樹模板

【9018:2207】持久化線段1

正整數 page sta 輸出 amp status efi oid 所有 2207: 【模板】可持久化線段樹1 時間限制: 2 Sec 內存限制: 256 MB提交: 45 解決: 14[提交][狀態][討論版] 題目描述 你需要維護1個數列的若幹版本: 對於給定的