#include<bits/stdc++.h>
using namespace std;
int b[10010000];
int main(void)
{
int n;
cin>>n;//组数
for(int i=0;i<n;i++)
{
int a;
cin>>a;//一组数据的总数
set<int> s;
for(int j=1;j<=a;j++)
{
int cao;
cin>>cao;
if(s.count(cao)==1)
//先判断输入的cao是否之前输入过
{
b[j]==0;//如果是,则最小值为0
continue;
}
s.insert(cao);//如果不是则存入set
if(j==1)
{
b[1]=cao;
}
else
{
set<int>::iterator it,ix,iy;
ix=s.begin();
iy=s.end();
iy--;
ix,iy即是边缘数,ix为第一个,iy为最后一个
if(cao==*iy)
{
iy--;
//如果输入的cao最大,则用cao减去前一个数
b[j]=cao-*iy;
}
else if(cao==*ix)
{
ix++;
b[j]=*ix-cao;
//同理,最小时用后一个数减cao
}
else
{
int zuo,you;
it=s.upper_bound(cao);
//不然it为cao的前一个数
you=*it-cao;//cao和右边最近数的差
it--;
it--;
//现在it是cao左边最近数
zuo=cao-*it;
b[j]=min(zuo,you);//取最小
}
}
}
int ans=0;
for(int qaq=1;qaq<=a;qaq++)
{
ans=ans+b[qaq];//相加b数组的和
}
cout<<ans<<endl;//输出并且进入下一个
}
}
展示的有点小问题希望不要介意
刚看的set用法,可能有点麻烦
样例过了但是全WA