昨天晚上第一在教职工公寓睡觉,myf大佬说有好多蚊子,但是我没感觉到咬我,最后是
12
12
12 点才睡,也没洗澡,计划今天中午洗一下。
早上 醒的时候看表是
5
:
37
5:37
5:37 ,然后开始翻《算阶》,然后
6
:
08
6:08
6:08 的时候突然想洗澡,但是怕弄醒 myf ,于是一直看算阶到他起床,然后洗漱,然后过来机房,路上碰到了lyn神犇
打开电脑发现
然后就回访了学长,学长看起来蛮热爱生活的,发说说挺频繁的(我不发说说),其中有一个直接笑死
还是好好学习吧,不能把集训的每天总结完全当成日记啊
知识点我写在另一个博客里了,因为我觉得ldy学长讲的数论太好了
总结顺序按照他的
P
P
T
PPT
PPT 来了
回头写好发布了,再在这里标明链接
其中有些不想证明的就直接截屏了
感谢源神
大多数通过感性理解到也说得过去
不过由于中午没睡,所以下午刚开始的状态不好,起初并没怎么听进去
中午发生了很神奇的事情,lyn大佬竟然把数竞的学姐鸽啦!
然后学姐就坐我旁边看《具体数学》,然后lyn找了个跑腿给学姐送寝室钥匙
然后学姐等到快
1
1
1 点,然后我去追学姐给源神拿可乐,然后累死了
然后回去睡觉,然后看着杰哥发呆,然后还没睡着就看见学姐特别委屈地过来说lyn给错了钥匙
学姐当时有明显的黑眼圈,还说要刀了lyn,所以可能没有尝试用一字钥匙打开十字的锁
(那就是正确的钥匙)
然后lyn回来了
下午又和mzx学长打了羽毛球
而且是主动约的我!!!有约不来是
∗
∗
**
∗∗
晚饭和午饭都是和源神一起吃的,而且还给mzx学长了两个红苹果,针不戳
晚上就通今天讲的内容,写总结。
算了还是敲代码吧。
我终于把序列分割
A
A
A 了
#include<bits/stdc++.h>
using namespace std;
#define N 200010
#define int long long
int n,k,a[N],q[N],l,r,g[N],s[N],fa[N][210],len,f[N];
int xie(int x,int y){return s[y]*s[y]-s[x]*s[x]-g[y]+g[x];}
signed main()
{
scanf("%lld%lld",&n,&k);
for(int i=1;i<=n;i++){scanf("%lld",&a[i]);s[i]=s[i-1]+a[i];}
for(int j=1,l,r;j<=k;j++)
{
l=1;r=1;q[r]=0;
for(int i=1;i<=n;i++)
{
while(l<r&&xie(q[l],q[l+1])<=s[i]*(s[q[l+1]]-s[q[l]]))l++;
f[i]=s[i]*s[q[l]]-s[q[l]]*s[q[l]]+g[q[l]];
fa[i][j]=q[l];
while(l<r&&xie(q[r-1],q[r])*(s[i]-s[q[r]])>=xie(q[r],i)*(s[q[r]]-s[q[r-1]]))r--;
q[++r]=i;
}
memcpy(g,f,sizeof f);
}
printf("%lld\n",f[n]);
for(int x=n,i=k;i;i--){x=fa[x][i];printf("%lld ",x);}
return 0;
我在for
循环里面,没有每次更新
l
l
l 和
r
r
r ,但还是在洛谷上得了
25
25
25 分。