20分set做法,求大佬帮忙看看错在哪里了orz
查看原帖
20分set做法,求大佬帮忙看看错在哪里了orz
234783
conprour楼主2021/1/28 16:49

有TLE也有WA,想不明白为什么啊

#include<bits/stdc++.h>
using namespace std;
const int M = 32767;
const int N = 1e6+6;
int a[M],n;
int tong[N];
set<int> s;
//set<int>::iterator tmp;
long long ans;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        tong[a[i]]++;
        s.insert(a[i]);
        if(i==1) ans+=a[i];
        if(i==2) ans+=abs(a[1]-a[2]);
        if(i>2)
        { 
            set<int>::iterator it1=s.upper_bound(a[i]);         
            int min1=abs(*it1-a[i]);
            set<int>::iterator it2=s.lower_bound(a[i]);
            it2--;
            int min2=abs(a[i]-*it2);
            if(tong[a[i]]>1) continue;
            if(it1==s.end()) {ans+=min2;continue;} 
        //  printf("min1=%d min2=%d\n",min1,min2);      
            ans+=min(min1,min2);
        //  printf("ans=%lld\n",ans);
        }
    }
    printf("%lld",ans);
    return 0;
}
2021/1/28 16:49
加载中...