Submission #44113287


Source Code Expand

#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define pf push_front
#define popb pop_back
#define popf pop_front
#define xx first
#define yy second
#define ff(i,s,f) for(int i=s;i<f;i++)
#define fb(i,s,f) for(int i=(s)-1;i>=f;i--)
#define ffi(i,s,f) for(int i=s;i<=f;i++)
#define fbi(i,s,f) for(int i=s;i>=f;i--)
#define srt(a) sort(a.begin(),a.end());
#define srtg(a,int) sort(a.begin(),a.end(),greater<int>())
#define lb(a,x) lower_bound(a.begin(),a.end(),x)
#define ub(a,x) upper_bound(a.begin(),a.end(),x)
#define fnd(a,x) find(a.begin(),a.end(),x)
#define ios ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)

using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef string str;

const int maxn=5e5+10;
const int inf=1e9;

int n;
int a[maxn];
int smoze[4*maxn];
int lazy[4*maxn];
int dokle[4*maxn];

void build(int ind=1,int l=0,int r=n-1){
    if(l==r){
        smoze[ind]=1;
        return;
    }
    int mid=l+(r-l)/2;
    build(2*ind,l,mid);
    build(2*ind+1,mid+1,r);
    smoze[ind]=smoze[2*ind]+smoze[2*ind+1];
}

void push(int ind){
    if(lazy[ind]==0) return;
    smoze[2*ind]=0;
    smoze[2*ind+1]=0;
    lazy[2*ind]=1;
    lazy[2*ind+1]=1;
    lazy[ind]=0;
}

void ubi(int tl,int tr,int ind=1,int l=0,int r=n-1){
    if(tl>tr) return;
    if(l!=r) push(ind);
    if(tl<=l && r<=tr){
        smoze[ind]=0;
        lazy[ind]=1;
        return;
    }
    int mid=l+(r-l)/2;
    if(tl<=mid) ubi(tl,tr,2*ind,l,mid);
    if(tr>mid) ubi(tl,tr,2*ind+1,mid+1,r);
    smoze[ind]=smoze[2*ind]+smoze[2*ind+1];
}

void update(int t,int v,int ind=1,int l=0,int r=n-1){
    if(l==r){
        dokle[ind]=v;
        return;
    }
    int mid=l+(r-l)/2;
    if(t<=mid) update(t,v,2*ind,l,mid);
    else update(t,v,2*ind+1,mid+1,r);
    dokle[ind]=min(dokle[2*ind],dokle[2*ind+1]);
}

int mini(int tl,int tr,int ind=1,int l=0,int r=n-1){
    if(tl>tr) return inf;
    if(tl<=l && r<=tr) return dokle[ind];
    int mid=l+(r-l)/2;
    int ret=inf;
    if(tl<=mid) ret=min(ret,mini(tl,tr,2*ind,l,mid));
    if(tr>mid) ret=min(ret,mini(tl,tr,2*ind+1,mid+1,r));
    return ret;
}

int moze(int tl,int tr,int ind=1,int l=0,int r=n-1){
    if(tl>tr) return 0;
    if(tl<=l && r<=tr) return smoze[ind];
    int mid=l+(r-l)/2;
    int ret=0;
    if(tl<=mid) ret+=moze(tl,tr,2*ind,l,mid);
    if(tr>mid) ret+=moze(tl,tr,2*ind+1,mid+1,r);
    return ret;
}

void solve(){
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    stack<pair<int,int> > stek;
    ll res=0;
    build();
    for(int i=0;i<n;i++){
        while(a[i]!=1 && !stek.empty() && stek.top().first!=a[i]-1){
            stek.pop();
        }
        if(a[i]==1){
            stek.push({1,i});
            update(i,i);
        }else{
            if(stek.empty()){
                update(i,-1);
            }else{
                auto tmp=stek.top();
                update(i,mini(stek.top().second,i-1));
                stek.pop();
                stek.push({tmp.first+1,tmp.second});
            }
        }
        ubi(mini(i,i)+1,i);
        res+=moze(0,i);
    }
    cout<<res;
}

int main(){
    ios;
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}

Submission Info

Submission Time
Task B - Insert 1, 2, 3, ...
User FEDIKUS
Language C++ (GCC 9.2.1)
Score 600
Code Size 3337 Byte
Status AC
Exec Time 475 ms
Memory 19616 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 60
Set Name Test Cases
Sample 01_sample_01.txt, 01_sample_02.txt, 01_sample_03.txt
All 01_sample_01.txt, 01_sample_02.txt, 01_sample_03.txt, 02_rand_1_01.txt, 02_rand_1_02.txt, 02_rand_1_03.txt, 02_rand_1_04.txt, 02_rand_1_05.txt, 02_rand_1_06.txt, 02_rand_1_07.txt, 02_rand_1_08.txt, 02_rand_1_09.txt, 02_rand_1_10.txt, 02_rand_1_11.txt, 02_rand_1_12.txt, 02_rand_1_13.txt, 02_rand_1_14.txt, 02_rand_1_15.txt, 03_rand_2_01.txt, 03_rand_2_02.txt, 03_rand_2_03.txt, 03_rand_2_04.txt, 03_rand_2_05.txt, 03_rand_2_06.txt, 03_rand_2_07.txt, 03_rand_2_08.txt, 03_rand_2_09.txt, 03_rand_2_10.txt, 03_rand_2_11.txt, 03_rand_2_12.txt, 03_rand_2_13.txt, 03_rand_2_14.txt, 03_rand_2_15.txt, 03_rand_2_16.txt, 03_rand_2_17.txt, 03_rand_2_18.txt, 03_rand_2_19.txt, 03_rand_2_20.txt, 03_rand_2_21.txt, 03_rand_2_22.txt, 03_rand_2_23.txt, 03_rand_2_24.txt, 03_rand_2_25.txt, 03_rand_2_26.txt, 03_rand_2_27.txt, 03_rand_2_28.txt, 03_rand_2_29.txt, 03_rand_2_30.txt, 03_rand_2_31.txt, 03_rand_2_32.txt, 03_rand_2_33.txt, 03_rand_2_34.txt, 03_rand_2_35.txt, 03_rand_2_36.txt, 03_rand_2_37.txt, 03_rand_2_38.txt, 03_rand_2_39.txt, 03_rand_2_40.txt, 03_rand_2_41.txt, 03_rand_2_42.txt
Case Name Status Exec Time Memory
01_sample_01.txt AC 16 ms 3472 KiB
01_sample_02.txt AC 2 ms 3592 KiB
01_sample_03.txt AC 4 ms 3556 KiB
02_rand_1_01.txt AC 2 ms 3484 KiB
02_rand_1_02.txt AC 2 ms 3548 KiB
02_rand_1_03.txt AC 210 ms 17376 KiB
02_rand_1_04.txt AC 201 ms 17416 KiB
02_rand_1_05.txt AC 3 ms 3492 KiB
02_rand_1_06.txt AC 291 ms 17792 KiB
02_rand_1_07.txt AC 291 ms 17868 KiB
02_rand_1_08.txt AC 281 ms 17724 KiB
02_rand_1_09.txt AC 281 ms 17840 KiB
02_rand_1_10.txt AC 278 ms 17744 KiB
02_rand_1_11.txt AC 278 ms 17832 KiB
02_rand_1_12.txt AC 285 ms 17776 KiB
02_rand_1_13.txt AC 280 ms 17844 KiB
02_rand_1_14.txt AC 284 ms 17828 KiB
02_rand_1_15.txt AC 284 ms 17788 KiB
03_rand_2_01.txt AC 254 ms 19452 KiB
03_rand_2_02.txt AC 254 ms 19500 KiB
03_rand_2_03.txt AC 257 ms 19588 KiB
03_rand_2_04.txt AC 255 ms 19564 KiB
03_rand_2_05.txt AC 253 ms 19592 KiB
03_rand_2_06.txt AC 253 ms 19452 KiB
03_rand_2_07.txt AC 254 ms 19616 KiB
03_rand_2_08.txt AC 281 ms 18744 KiB
03_rand_2_09.txt AC 279 ms 18684 KiB
03_rand_2_10.txt AC 278 ms 18624 KiB
03_rand_2_11.txt AC 278 ms 18636 KiB
03_rand_2_12.txt AC 278 ms 18800 KiB
03_rand_2_13.txt AC 282 ms 18736 KiB
03_rand_2_14.txt AC 278 ms 18808 KiB
03_rand_2_15.txt AC 292 ms 18432 KiB
03_rand_2_16.txt AC 292 ms 18240 KiB
03_rand_2_17.txt AC 293 ms 18280 KiB
03_rand_2_18.txt AC 292 ms 18112 KiB
03_rand_2_19.txt AC 294 ms 18272 KiB
03_rand_2_20.txt AC 291 ms 18220 KiB
03_rand_2_21.txt AC 291 ms 18592 KiB
03_rand_2_22.txt AC 323 ms 17868 KiB
03_rand_2_23.txt AC 324 ms 17864 KiB
03_rand_2_24.txt AC 326 ms 17856 KiB
03_rand_2_25.txt AC 325 ms 17808 KiB
03_rand_2_26.txt AC 323 ms 17800 KiB
03_rand_2_27.txt AC 325 ms 17860 KiB
03_rand_2_28.txt AC 326 ms 17892 KiB
03_rand_2_29.txt AC 359 ms 17788 KiB
03_rand_2_30.txt AC 354 ms 17732 KiB
03_rand_2_31.txt AC 354 ms 17836 KiB
03_rand_2_32.txt AC 355 ms 17732 KiB
03_rand_2_33.txt AC 354 ms 17788 KiB
03_rand_2_34.txt AC 354 ms 17788 KiB
03_rand_2_35.txt AC 356 ms 17664 KiB
03_rand_2_36.txt AC 430 ms 17868 KiB
03_rand_2_37.txt AC 427 ms 17724 KiB
03_rand_2_38.txt AC 474 ms 17720 KiB
03_rand_2_39.txt AC 436 ms 17828 KiB
03_rand_2_40.txt AC 475 ms 17836 KiB
03_rand_2_41.txt AC 442 ms 17840 KiB
03_rand_2_42.txt AC 447 ms 17868 KiB