1 条题解
-
0
自动搬运
来自洛谷,原作者为

lzl123
**搬运于
2025-08-24 21:35:27,当前版本为作者最后更新于2018-01-07 20:15:05,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
本来想水个三十分先
于是写了个排序
结果直接A题!
——尴尬....本来打算写平衡树的,看到排序都A了就无趣咯
其实就是直接根据每天的值排序,然后它左右最近的数一定是和它的值相差最小的嘛
于是在左右都看看,如果天数比它的天数小就满足题意所以直接算到答案里去噻
#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; }
- 1
信息
- ID
- 1233
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者