求助,WA 5
查看原帖
求助,WA 5
1053119
hard_learn楼主2024/7/24 09:16
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q;
map<int,int>p;
int a[200005],c[200005];
int o=0,op[200005];
struct st{
    int l,r;
}sum[200005];
int ans[200005],tt[200005];
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>q;
    for(int i=1;i<=q;i++){
        cin>>a[i];
        if(p[a[i]]==0){
            p[a[i]]=1;
            o++;
            if(sum[a[i]].l==0){
                sum[a[i]].l=i;
                sum[a[i]].r=i;
                tt[a[i]]++;
            }
            else{
                ans[a[i]]+=op[sum[a[i]].r-1]-op[sum[a[i]].l-1];
                sum[a[i]].l=i;
                sum[a[i]].r=i;
            }
        }
        else{
            p[a[i]]=0;
            o--;
            sum[a[i]].r=i;
        }
        op[i]=op[i-1]+o;
        // cout<<o<<" ";
    }   
    // cout<<endl;
    // for(int i=1;i<=q;i++){
    //     cout<<op[i]<<" ";
    // }
    // cout<<endl;
    sort(a+1,a+q+1);
    o=0;
    for(int i=1;i<=q;i++){
        c[++o]=a[i];
        while(a[i]==a[i+1]){
            i++;
        }
    }
    // for(int i=1;i<=o;i++){
    //     cout<<c[i]<<" ";
    // }
    // cout<<endl;
    for(int i=1;i<=o;i++){
        if(tt[c[i]]==1&&sum[c[i]].l!=sum[c[i]].r){
            ans[c[i]]+=op[sum[c[i]].r-1]-op[sum[c[i]].l-1];
        }
        else if(tt[c[i]]==1&&sum[c[i]].l==sum[c[i]].r){
            sum[c[i]].r=q;
            ans[c[i]]+=op[sum[c[i]].r]-op[sum[c[i]].l-1];
        }
    }
    for(int i=1;i<=o;i++){
        cout<<ans[c[i]]<<" ";
    }
    cout<<endl;
    return 0;
}
2024/7/24 09:16
加载中...