提出 #61828225


ソースコード 拡げる

#include <bits/stdc++.h>

using namespace std;

using ll = long long;

const int  N=1e6+10, S=1e6;

struct Segtree{
    int d[4*N];
    int FL[N*4],FR[N*4];

    void pushup(int p){
        FL[p]=FL[p*2];
        FR[p]=FR[p*2+1];
    }

    void pushdown(int p) {
        if (d[p]) {
            FL[p*2]+=d[p],FL[p*2+1]+=d[p];
            FR[p*2]+=d[p],FR[p*2+1]+=d[p];
            d[p*2]+=d[p],d[p*2+1]+=d[p];
        }
        d[p]=0;
    }

    void build(int p,int l, int r) {
        if(l==r) {
            FR[p]=FL[p]=l;
            return;
        }
        int mid=(l+r)/2;
        build(p*2,l,mid),build(p*2+1,mid+1,r);
        pushup(p);
    }

    void update(int p, int l, int r, int L, int R, int x) {
        if (L<=l && r<=R) {
            d[p]+=x; FL[p]+=x; FR[p]+=x;
            return;
        }
        int mid=(l+r)/2;
        pushdown(p);
        if (L <= mid) update(p*2,l,mid,L,R,x);
        if (R > mid) update(p*2+1,mid+1,r,L,R,x);
        pushup(p);
    }
    
    int query(int p, int l, int r, int pos) {
        if(l==r)return FL[p];
        pushdown(p);
        int mid=(l+r)/2;
        if(pos<=mid)return query(p*2,l,mid,pos);
        else return query(p*2+1,mid+1,r,pos);
    }
    // 找第一个>=val的
    int get_l(int p, int l, int r, int val) {
        if (l==r) return l;
        
        pushdown(p);
        int mid=(l+r)/2;
        //左边有
        if (FR[p*2]>=val) return get_l(p*2, l, mid, val);
        else return get_l(p*2+1, mid+1, r, val);
    }
    
    // 找最后一个<=val的
    int get_r(int p, int l, int r, int val) {
        
        if (l==r) return l;
        
        pushdown(p);
        // cerr<<"GR"<<p<<' '<<l<<' '<<r<<' '<<FL[p*2+1]<<' '<<val<<'\n';
        int mid=(l+r)/2;

        // 右边第一个就不行了
        if (FL[p*2+1]>val) return get_r(p*2, l, mid, val);
        else return get_r(p*2+1, mid+1, r, val);
    }
};

Segtree T;


int n, a[N];

int main() {
    cin>>n;
    
    T.build(1,1,S);

    for(int i=1;i<=n;i++){
        int l,r;cin>>l>>r;
        int L=T.get_l(1,1,S,l);
        int R=T.get_r(1,1,S,r);
        // cout << "opt"<<L << ' ' << R << '\n';
        T.update(1,1,S,L,R,1);
    }
    int q;cin>>q;
    for(int i=1;i<=q;i++) {
        int x;
        cin>>x;
        cout<<T.query(1,1,S,x) << '\n';
    }



    
    return 0;
}

提出情報

提出日時
問題 F - Rated Range
ユーザ Nicrobott
言語 C++ 20 (gcc 12.2)
得点 525
コード長 2447 Byte
結果 AC
実行時間 707 ms
メモリ 24152 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 525 / 525
結果
AC × 3
AC × 36
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 8 ms 19852 KiB
00_sample_01.txt AC 8 ms 20184 KiB
00_sample_02.txt AC 9 ms 20656 KiB
01_test_00.txt AC 13 ms 23932 KiB
01_test_01.txt AC 12 ms 23920 KiB
01_test_02.txt AC 11 ms 23616 KiB
01_test_03.txt AC 10 ms 22200 KiB
01_test_04.txt AC 407 ms 24024 KiB
01_test_05.txt AC 707 ms 24148 KiB
01_test_06.txt AC 425 ms 24076 KiB
01_test_07.txt AC 705 ms 24072 KiB
01_test_08.txt AC 486 ms 24008 KiB
01_test_09.txt AC 703 ms 24152 KiB
01_test_10.txt AC 333 ms 24140 KiB
01_test_11.txt AC 697 ms 24068 KiB
01_test_12.txt AC 491 ms 24008 KiB
01_test_13.txt AC 691 ms 23948 KiB
01_test_14.txt AC 322 ms 24004 KiB
01_test_15.txt AC 701 ms 24008 KiB
01_test_16.txt AC 62 ms 24012 KiB
01_test_17.txt AC 696 ms 24008 KiB
01_test_18.txt AC 427 ms 24072 KiB
01_test_19.txt AC 688 ms 23988 KiB
01_test_20.txt AC 529 ms 24144 KiB
01_test_21.txt AC 544 ms 24016 KiB
01_test_22.txt AC 534 ms 22780 KiB
01_test_23.txt AC 528 ms 22764 KiB
01_test_24.txt AC 630 ms 24140 KiB
01_test_25.txt AC 636 ms 24080 KiB
01_test_26.txt AC 634 ms 24008 KiB
01_test_27.txt AC 633 ms 23984 KiB
01_test_28.txt AC 9 ms 19968 KiB
01_test_29.txt AC 9 ms 20008 KiB
01_test_30.txt AC 9 ms 19940 KiB
01_test_31.txt AC 9 ms 20004 KiB
01_test_32.txt AC 9 ms 20044 KiB