提出 #62116381


ソースコード 拡げる

// LUOGU_RID: 200588712
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10,maxq = 3e5 + 10,maxm = 5e5 + 10;
int n,m,q;
int L[maxn],R[maxn];
int p[maxq];
int res[maxm];
int min_val[maxm << 2],max_val[maxm << 2],tag[maxm << 2];

void pushdown(int i){
    tag[i * 2] += tag[i]; tag[i * 2 + 1] += tag[i];
    min_val[i * 2] += tag[i]; min_val[i * 2 + 1] += tag[i];
    max_val[i * 2] += tag[i]; max_val[i * 2 + 1] += tag[i];
    tag[i] = 0;
}

void pushup(int i){
    min_val[i] = min_val[i * 2];
    max_val[i] = max_val[i * 2 + 1];
}

void build(int i,int l,int r){
    if(l == r){
        min_val[i] = l; max_val[i] = r;
        return;
    }
    int mid = (l + r) / 2;
    build(i * 2,l,mid);
    build(i * 2 + 1,mid + 1,r);
    pushup(i);
}

int find_min(int i,int l,int r,int x){
    if(l == r)  return l;
    if(tag[i] > 0)  pushdown(i);
    int mid = (l + r) / 2;
    if(max_val[i * 2] >= x) return find_min(i * 2,l,mid,x);
    else if(max_val[i * 2 + 1] >= x)    return find_min(i * 2 + 1,mid + 1,r,x);
    else    return -1; 
}

int find_max(int i,int l,int r,int x){
    if(l == r)  return l;
    if(tag[i] > 0)  pushdown(i);
    int mid = (l + r) / 2;
    if(min_val[i * 2 + 1] <= x) return find_max(i * 2 + 1,mid + 1,r,x);
    else if(min_val[i * 2] <= x)   return find_max(i * 2,l,mid,x);
    else    return -1;
}

void update(int i,int l,int r,int fl,int fr){
    if(fl <= l && r <= fr){
        tag[i] ++;
        min_val[i] ++; max_val[i] ++;
        return;
    }
    if(tag[i] > 0)  pushdown(i);
    int mid = (l + r) / 2;
    if(fl <= mid)   update(i * 2,l,mid,fl,fr);
    if(mid < fr)    update(i * 2 + 1,mid + 1,r,fl,fr);
    pushup(i);
}

void _export(int i,int l,int r){
    if(l == r){
        res[l] = min_val[i];
        return;
    }
    if(tag[i] > 0)  pushdown(i);
    int mid = (l + r) / 2;
    _export(i * 2,l,mid);
    _export(i * 2 + 1,mid + 1,r);
}

int main(){
    scanf("%d",&n);
    for(int i = 1;i <= n;i ++){
        scanf("%d %d",&L[i],&R[i]);
    }
    scanf("%d",&q);
    for(int i = 1;i <= q;i ++){
        scanf("%d",&p[i]);
        m = max(m,p[i]);
    }
    build(1,1,m);
    for(int i = 1;i <= n;i ++){
        int fl = find_min(1,1,m,L[i]),fr = find_max(1,1,m,R[i]);
        if(fl > 0 && fr > 0)    update(1,1,m,fl,fr);
    }
    _export(1,1,m);
    for(int i = 1;i <= q;i ++){
        printf("%d\n",res[p[i]]);
    }
    return 0;
}

提出情報

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

コンパイルエラー

Main.cpp: In function ‘int main()’:
Main.cpp:77:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   77 |     scanf("%d",&n);
      |     ~~~~~^~~~~~~~~
Main.cpp:79:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   79 |         scanf("%d %d",&L[i],&R[i]);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~
Main.cpp:81:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   81 |     scanf("%d",&q);
      |     ~~~~~^~~~~~~~~
Main.cpp:83:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   83 |         scanf("%d",&p[i]);
      |         ~~~~~^~~~~~~~~~~~

ジャッジ結果

セット名 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 1 ms 3788 KiB
00_sample_01.txt AC 11 ms 17892 KiB
00_sample_02.txt AC 9 ms 17064 KiB
01_test_00.txt AC 12 ms 17992 KiB
01_test_01.txt AC 12 ms 17988 KiB
01_test_02.txt AC 11 ms 17956 KiB
01_test_03.txt AC 11 ms 17984 KiB
01_test_04.txt AC 110 ms 19404 KiB
01_test_05.txt AC 253 ms 20752 KiB
01_test_06.txt AC 208 ms 19868 KiB
01_test_07.txt AC 259 ms 20704 KiB
01_test_08.txt AC 230 ms 20000 KiB
01_test_09.txt AC 253 ms 20600 KiB
01_test_10.txt AC 105 ms 19208 KiB
01_test_11.txt AC 261 ms 20704 KiB
01_test_12.txt AC 141 ms 19576 KiB
01_test_13.txt AC 256 ms 20636 KiB
01_test_14.txt AC 161 ms 19292 KiB
01_test_15.txt AC 257 ms 20772 KiB
01_test_16.txt AC 33 ms 18180 KiB
01_test_17.txt AC 255 ms 20692 KiB
01_test_18.txt AC 181 ms 19588 KiB
01_test_19.txt AC 267 ms 20608 KiB
01_test_20.txt AC 133 ms 20664 KiB
01_test_21.txt AC 133 ms 20660 KiB
01_test_22.txt AC 128 ms 18156 KiB
01_test_23.txt AC 124 ms 17848 KiB
01_test_24.txt AC 219 ms 20820 KiB
01_test_25.txt AC 228 ms 20596 KiB
01_test_26.txt AC 233 ms 20832 KiB
01_test_27.txt AC 239 ms 20600 KiB
01_test_28.txt AC 3 ms 6248 KiB
01_test_29.txt AC 8 ms 13804 KiB
01_test_30.txt AC 1 ms 3628 KiB
01_test_31.txt AC 11 ms 18112 KiB
01_test_32.txt AC 2 ms 4536 KiB