提出 #73080336


ソースコード 拡げる

#include<bits/stdc++.h>
#include"atcoder/all"
using namespace std;
using namespace atcoder;
#define int long long
int inf = 2000000000000000000;

struct SegmentTreemin {
    vector<int> data;
    int size;
    
    // 配列の初期値を決めておく
    int syoki=inf;
    int f(int a,int b){
        // 最大値: max  最小値: min 総和 a+b
        return min(a,b);
    }

    SegmentTreemin(int n) {
    size = 1;
    while (size < n) {
        size <<= 1;
    }
        data.assign(2 * size, syoki);
    }
    int query(int a, int b, int k, int l, int r) {
        if (r <= a || b <= l) {
            return(syoki);
        }
        if (a <= l && r <= b) {
            return(data[k]);
        }
        return(f(query(a, b, 2 * k + 1, l, (l + r) >> 1), query(a, b, 2 * k + 2, (l + r) >> 1, r)));
    }
    int query(int a, int b) {
        return(query(a, b, 0, 0, size));
    }
    void update(int k, int x) {
        k += size - 1;
        data[k] = x;
        while (k > 0) {
            k = (k - 1) >> 1;
            data[k] = f(data[2 * k + 1], data[2 * k + 2]);
        }
    }
};

struct SegmentTreemax {
    vector<int> data;
    int size;
    
    // 配列の初期値を決めておく
    int syoki=0;
    int f(int a,int b){
        // 最大値: max  最小値: min 総和 a+b
        return max(a,b);
    }

    SegmentTreemax(int n) {
    size = 1;
    while (size < n) {
        size <<= 1;
    }
        data.assign(2 * size, syoki);
    }
    int query(int a, int b, int k, int l, int r) {
        if (r <= a || b <= l) {
            return(syoki);
        }
        if (a <= l && r <= b) {
            return(data[k]);
        }
        return(f(query(a, b, 2 * k + 1, l, (l + r) >> 1), query(a, b, 2 * k + 2, (l + r) >> 1, r)));
    }
    int query(int a, int b) {
        return(query(a, b, 0, 0, size));
    }
    void update(int k, int x) {
        k += size - 1;
        data[k] = x;
        while (k > 0) {
            k = (k - 1) >> 1;
            data[k] = f(data[2 * k + 1], data[2 * k + 2]);
        }
    }
};
signed main(){
    int n,d;cin>>n>>d;
    int a[n];
    for(int i=0;i<n;i++)cin>>a[i];
    SegmentTreemin Smin(n);
    SegmentTreemax Smax(n);

    for(int i=0;i<n;i++){
        Smin.update(i,a[i]);
        Smax.update(i,a[i]);
    }

    int R=0;
    int ans=0;
    for(int l=0;l<n;l++){
        if(R<l)R=l;
        for(int j=R+1;j<n;j++){
            //cout<<Smin.query(l,j)<<"\n";
            if(a[j]<=Smin.query(l,j)-d || a[j]>=Smax.query(l,j)+d){
                R++;
            }else{
                break;
            }
        }
        ans+=R-l+1;
        //cout<<l<<" "<<R<<" "<<ans<<"\n";
    }
    //cout<<ans<<"\n";

    for(int i=0,j=n-1;i<j;i++,j--){
        swap(a[i],a[j]);
    }
    for(int i=0;i<n;i++){
        Smin.update(i,a[i]);
        Smax.update(i,a[i]);
    }

    R=0;
    int ans2=0;
    for(int l=0;l<n;l++){
        if(R<l)R=l;
        for(int j=R+1;j<n;j++){
            //cout<<Smin.query(l,j)<<"\n";
            if(a[j]<=Smin.query(l,j)-d || a[j]>=Smax.query(l,j)+d){
                R++;
            }else{
                break;
            }
        }
        ans2+=R-l+1;
        //cout<<l<<" "<<R<<" "<<ans<<"\n";
    }
    cout<<max(ans,ans2)<<"\n";
}

提出情報

提出日時
問題 E - Sparse Range
ユーザ Sabakanmelm
言語 C++23 (GCC 15.2.0)
得点 0
コード長 3387 Byte
結果 WA
実行時間 475 ms
メモリ 22980 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 0 / 450
結果
AC × 3
AC × 7
WA × 14
セット名 テストケース
Sample sample_01.txt, sample_02.txt, sample_03.txt
All min1.txt, min2.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, sample_01.txt, sample_02.txt, sample_03.txt
ケース名 結果 実行時間 メモリ
min1.txt AC 1 ms 3560 KiB
min2.txt AC 1 ms 3416 KiB
random_01.txt WA 475 ms 22848 KiB
random_02.txt WA 401 ms 22344 KiB
random_03.txt WA 475 ms 22832 KiB
random_04.txt WA 412 ms 22468 KiB
random_05.txt WA 474 ms 22980 KiB
random_06.txt WA 265 ms 13248 KiB
random_07.txt WA 474 ms 22904 KiB
random_08.txt WA 353 ms 22088 KiB
random_09.txt WA 474 ms 22860 KiB
random_10.txt WA 317 ms 21752 KiB
random_11.txt WA 384 ms 22212 KiB
random_12.txt AC 77 ms 8188 KiB
random_13.txt AC 385 ms 22864 KiB
random_14.txt WA 473 ms 22864 KiB
random_15.txt WA 472 ms 22864 KiB
random_16.txt WA 474 ms 22908 KiB
sample_01.txt AC 1 ms 3460 KiB
sample_02.txt AC 1 ms 3416 KiB
sample_03.txt AC 1 ms 3420 KiB