제출 #1170999

#제출 시각아이디문제언어결과실행 시간메모리
1170999AlgorithmWarriorMoney (IZhO17_money)C++20
100 / 100
207 ms15996 KiB
#include <bits/stdc++.h>

using namespace std;

int const MAX=1e6+5;
int v[MAX];
int fr[MAX];
int st[MAX],dr[MAX];
int n;

void read(){
    cin>>n;
    int i;
    for(i=1;i<=n;++i)
        cin>>v[i];
}

void precalc(){
    int i;
    for(i=1;i<=n;++i){
        int val=v[i];
        ++fr[val];
    }
    int ult=0;
    for(i=1;i<MAX;++i)
        if(fr[i]){
            st[i]=ult;
            dr[ult]=i;
            ult=i;
        }
    dr[ult]=MAX-1;
    st[MAX-1]=ult;
}

int solve(){
    int id=n;
    int ans=0;
    while(id){
        ++ans;
        int val=v[id];
        while(v[id]==val){
            --fr[val];
            --id;
        }
        if(!fr[val]){
            dr[st[val]]=dr[val];
            st[dr[val]]=st[val];
        }
        val=st[val];
        while(v[id]==val && id){
            --fr[val];
            --id;
            if(!fr[val]){
                dr[st[val]]=dr[val];
                st[dr[val]]=st[val];
                val=st[val];
            }
        }
    }
    return ans;
}

int main()
{
    read();
    precalc();
    cout<<solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...