1 条题解

  • 1
    @ 2022-7-14 19:48:49
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define mod 998244353
    #ifdef ONLINE_JUDGE
    char *TT,*mo,but[(1<<15)+2];
    #define getchar() ((TT==mo&&(mo=(TT=but)+fread(but,1,1<<15,stdin)),TT==mo)?0:*TT++)
    #endif
    inline int read(){
        int x=0,c=0,f=1;
        for(;c<'0'||c>'9';c=getchar())f=c!='-';
        for(;c>='0'&&c<='9';c=getchar())x=x*10+c-'0';
        return f?x:-x;
    }
    int head[100010];
    int a[100010],b[100010];
    ll dp[100010];
    ll ans;
    int n;
    int main(){
        n=read();
        for(int i=1;i<=n;i++){
            a[i]=read();
            b[i]=a[i];
        } 
        sort(b+1,b+n+1);
        int cnt=unique(b+1,b+n+1)-b-1;
        for(int i=1;i<=n;i++)a[i]=lower_bound(b+1,b+cnt+1,a[i])-b;
        dp[n]=2;
        head[a[n]]=n;
        for(int i=n-1;i>0;i--){
            dp[i]=(dp[i+1]*2+2)%mod;
            if(head[a[i]]){
                dp[i]=(dp[i]-dp[head[a[i]]+1]+mod-1)%mod;
                head[a[i]]=i;
            }
            head[a[i]]=i;
        }
        for(int i=1;i<=n;i++){
            ans=(ans+dp[i])%mod;
        }
        cout<<ans;
        return 0;
    }
    
    • 1

    信息

    ID
    370
    时间
    1000ms
    内存
    125MiB
    难度
    5
    标签
    递交数
    1
    已通过
    1
    上传者