这是题解的代码
#include <cstdio>
#include <algorithm>
#define ri register int
#define getchar() (S==T&&(T=(S=BB)+fread(BB,1,1<<15,stdin),S==T)?EOF:*S++)
char BB[1<<20],*S=BB,*T=BB;
using namespace std;
int n,sum;
inline int read()
{
int num=0,w=1; char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar(); }
while(ch>='0'&&ch<='9') num=(num<<3)+(num<<1)+ch-'0',ch=getchar();
return num*w;
}
struct A{
int num,day;
}a[100000];
bool cmp(A a,A b)
{
return a.num<b.num;
}
inline int check(int x)
{ int p=2147483647,t=2147483647;
if(a[x].day==1) return a[x].num;
for(ri i=x-1;i>=1;--i)
if(a[i].day<a[x].day) {p=(a[i].num>a[x].num)?a[i].num-a[x].num:a[x].num-a[i].num;break;}
for(ri i=x+1;i<=n;++i)
if(a[i].day<a[x].day) {t=(a[i].num>a[x].num)?a[i].num-a[x].num:a[x].num-a[i].num;break;}
return (p>t)?t:p;
}
int main()
{
n=read();
for(ri i=1;i<=n;++i)
a[i].num=read(),a[i].day=i;
sort(a+1,a+1+n,cmp);
for(ri i=1;i<=n;++i)
sum+=check(i);
printf("%d",sum);
return 0;
}
这是我的代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <string>
#define maxn 1000100
using namespace std;
struct day {
int num;
int val;
} a[maxn];
int n;
bool cmp(day a, day b) {
return a.val < b.val;
}
int check(int x) {
int t1 = 1e9 + 10;
// int t2 = 0;
if (a[x].num == 0) {
return a[x].val;
}
for (int i = 0; i < n; i++) {
if (a[i].num < a[x].num) {
t1 = min(abs(a[i].val - a[x].val), t1);
// cout << "t1=" << t1 << endl;
}
}
return t1;
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
scanf("%d", &a[i].val);
a[i].num = i;
}
int sum = 0;
sort(a, a + n, cmp);
// cout << "sum=" << sum << endl;
for (int i = 0; i < n; i++) {
// cout << ":" << check(i) << endl;
sum += check(i);
}
cout << sum;
return 0;
}
为什么我的就会疯狂爆TLE?