fzu 防守阵地 1
2017-02-15 16:25
127 查看
#include<stdio.h> #include<string.h> #define rr 1000000 int a[rr+5],sum[rr+5],ssum[rr+5]; int main() { int n,m; while(~scanf("%d%d",&n,&m)) { sum[0]=ssum[0]=0; for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) { sum[i]=sum[i-1]+a[i]; } for(int i=1;i<=n;i++) { ssum[i]=ssum[i-1]+sum[i]; } long long ans=0; for(int i=m;i<=n;i++) { long long mid=0; long long cha=ssum[i-1]-ssum[i-m-1]; mid=sum[i]*m-cha; if(mid>ans) ans=mid; } printf("%lld\n",ans); } }
处理前缀和
sum【1】=a[1]
sum[2]=a[1]+a[2];
sum[3]=a[1]+a[2]+a[3];
sum[4]=a[1]+a[2]+a[3]+a[4]
以样例为主
max=a[3]+2*a[4]+3*a[5];
a[5]=sim[5]-sum[4];
a[4]+a[5]=sum[5]-sum[3];
a[3]+a[4]+a[5]=sum[5]-sum[2];
max=(a[3]+a[4]+a[5])+(a[4]+a[5])+(a[5]);
=3*sum[5]-(sum[4]+sum[3]+sum[2])
为了节省时间我们对sum进行意思前缀和
ssum【i-1】-是ssum【i-m-1】;
防守阵地 I
FAQ | About | Google Group | Discuss | Author
相关文章推荐
- fzu 2171 防守阵地 II
- FZU 2171 防守阵地 II(线段树区间修改)
- FZU2171 - 防守阵地 II 线段树的区间更新
- FZU2171 防守阵地 II(线段树)
- FZU 2168 防守阵地 I
- FZU 2168 防守阵地 I (递推)
- FZU2168:防守阵地 I
- 【FZU】2171 防守阵地 II 线段树
- FZU 2168 防守阵地 I
- FZU 2171 防守阵地 II(线段树区间更新【lazy标记】)
- 树状数组+ 成段更新+ 成段输出 裸题 Fzu 2171 防守阵地2
- FZU Problem 2171 防守阵地 II (线段树,区间更新)
- FZU 2168 防守阵地I (模拟 简单规律)
- FZU_Problem 2168 防守阵地 I
- FZU Problem 2168 防守阵地 I
- FZU_Problem 2168 防守阵地 I
- fzu 2171 防守阵地 II(线段树,成段更新,查询一段区间和)
- FZU_Problem 2171 防守阵地 II
- FZU Problem 2171 防守阵地 II (裸线段树 懒惰标记)
- FZU 2168 防守阵地 I