题目描述: 给你一个数组,每个区间段的值等于该区间内不相等元素的个数,现在让你输出这个大区间所包含区间段的总值
1<=a[i],n<=1e5;(看数据也可以看出来要处理a[i]的值)
分析:比赛时自闭了4.30个小时,,,,,             这个题的思路是把它按每个元素的贡献来写的,首先从输的方向从左到右,该元素又可以看成是前一个的往后延伸了一位,那么多出来的贡献是那段没有该值的区间;
所以记录每个值最后出现的位置   这点的贡献等于前面一点的贡献+这点的位置-上次出现过的位置
ac代码:
#include<bits/stdc++.h>
using namespace std;
int vis[100004]={0};
int main(){
    int n;
    cin>>n;
    int d=0,c=0;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        d+=i-vis[x];
        c+=d;
        vis[x]=i;
        cout<<c<<' '<<d<<' '<<i<<endl;
    }
    cout<<c<<endl;
}