1.14模拟赛

dp式子很好列

展开就是斜率优化。而且横坐标单增,可以直接单调队列

但是权值的偏序比较麻烦

两种方法:

1.权值线段树维护单调队列

权值离散化。线段树每个节点维护所代表的区间的凸包(单调队列)

非常暴力,每次新加入一个点,就在对应位置插入,然后在logn个凸包上插入这个点。由于横坐标单增,所以直接队尾加入即可。

复杂度均摊O(logn)总复杂度O(nlogn)

deque慢死,vector还是慢死,可以开O(nlogn)长度的数组,然后给每个点分配所属的内存。类似于分治的内存分配感觉

 

2.cdq

偏序问题,cdq可以利用下标解决一维

①但是最大的问题是,这个题的dp,按照一般的cdq(l,mid),cdq(mid+1,r)再处理当前,会后效性。正确性不对

②如果cdq(l,mid)处理当前,再cdq(mid+1,r);本身不能处理好偏序的问题,(不能自底向上归并),暴力sort会TLE。复杂度不对

其实我们第二个方案只要知道当前的排序结果即可。

所以空跑一遍cdq,然后归并,记录每一层最终的排序结果。即可。

(考场上没有想出来先空跑预处理一遍,然后logn层存下来。。。。。。浪费大量时间得到了暴力分的好成绩)

 

T2:

变换可以考虑卷积

xor可以考虑拆位

多项式快速幂

 这个三次变两次:这里有写到:

傅里叶变换(FFT)学习笔记

 

因为其他的项系数都是偶数,直接为0

手玩观察

每一项次数平方,系数也平方。就完成了多项式的平方

emm。。。其实这一句就够了

但是不从拆位,快速幂,多项式平方的角度推过来,难以想到

暴力模拟:每次跳2^t步,可以找环,然后对于每个i,找所在环的前k个做xor和(前缀和优化)即可。

再加上快速幂的logT

 

T3:

f[i][j]表示,第i个位置放点,包括第i个位置放了j个点,最大收益

考虑区间贡献怎样不算重。

线段树处理每个点的贡献,到了区间左端点,把[1,l-1]加上c;到右端点的时候,把[1,l-1]减掉c

O(nmlogn)

 

 

T1的cdq经验不足啊,,,总是预处理有的时候想不到。。总空间O(nlogn)预处理还是很常见的。。。

posted @ 2019-01-14 15:40  *Miracle*  阅读(193)  评论(0编辑  收藏  举报