线段树+卷积

这个东西直接算不太好,但是合并两段结果却很方便,假设c[i]表示选i个数乘积的和,那么$a[i]=\sum_{j=0}^{i}{b[j]*c[i-j]}$

线段树维护即可

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + ;
const double pi = acos(-);
int n, len, ans, suma, sumb, mx = -1e9, m;
struct data {
double x, y;
data() {}
data(double _x, double _y) : x(_x), y(_y) {}
data friend operator - (const data &a, const data &b) {
return data(a.x - b.x, a.y - b.y);
}
data friend operator + (const data &a, const data &b) {
return data(a.x + b.x, a.y + b.y);
}
data friend operator * (const data &a, const data &b) {
return data(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
}
} a[N], b[N];
void fft(data *a, int len, int f) {
int n = << len;
for(int i = ; i < n; ++i) {
int t = ;
for(int j = ; j < len; ++j) {
if(i & ( << j)) {
t |= << (len - j - );
}
}
if(i < t) {
swap(a[i], a[t]);
}
}
for(int l = ; l <= n; l <<= ) {
int m = l >> ;
data w = data(cos(pi / m), f * sin(pi / m));
for(int i = ; i < n; i += l) {
data t = data(, );
for(int k = ; k < m; ++k, t = t * w) {
data x = a[k + i], y = t * a[i + k + m];
a[k + i] = x + y;
a[i + m + k] = x - y;
}
}
}
}
int main() {
scanf("%d%d", &n, &m);
for(int i = ; i <= n; ++i) {
scanf("%lf", &a[i].x);
suma += a[i].x;
}
for(int i = ; i <= n; ++i) {
scanf("%lf", &b[i].x);
b[i + n].x = b[i].x;
sumb += b[i].x;
}
int c = floor((double)(sumb - suma) / n + 0.5);
for(int i = ; i <= n; ++i) {
a[i].x += c;
ans += a[i].x * a[i].x + b[i].x * b[i].x;
}
reverse(b + , b + * n + );
for(; << len <= * n; ++len);
fft(a, len, );
fft(b, len, );
for(int i = ; i < << len; ++i) {
a[i] = a[i] * b[i];
}
fft(a, len, -);
for(int i = n + ; i <= * n + ; ++i) {
a[i].x /= ( << len);
mx = max(mx, (int)(a[i].x + 0.1));
}
printf("%d\n", ans - * mx);
return ;
}

bzoj2962的更多相关文章

  1. 【BZOJ2962】序列操作(线段树)

    [BZOJ2962]序列操作(线段树) 题面 BZOJ 题解 设\(s[i]\)表示区间内选择\(i\)个数的乘积的和 考虑如何向上合并? \(s[k]=\sum_{i=0}^klson.s[i]*r ...

  2. 【BZOJ2962】序列操作 线段树

    [BZOJ2962]序列操作 Description 有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反 ...

  3. [bzoj2962]序列操作_线段树_区间卷积

    序列操作 bzoj-2962 题目大意:给定一个n个数的正整数序列,m次操作.支持:1.区间加:2.区间取相反数:3.区间求选c个数的乘积和. 注释:$1\le n,m\le 5\cdot 10^4$ ...

  4. 【BZOJ-2962】序列操作 线段树 + 区间卷积

    2962: 序列操作 Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 678  Solved: 246[Submit][Status][Discuss] ...

  5. bzoj2962 序列操作 题解

    题目大意: 有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问[a,b]这 ...

  6. 序列操作 BZOJ2962 线段树

    分析: 数据范围表示:c特别的小(c<20) 我们可以考虑nlogn*c^2的算法. 线段树维护区间信息:f[i]表示在[l,r]这段区间中选择i个数相乘的和. 因此,我们可以将区间看成一个点, ...

  7. 序列操作bzoj2962(未完成)

    题解: 注意到k<=20;记录20个数f1...f20表示从选1-20个数的乘积分别为多少, 那么是一个(…+x)(…+x)……(…+x) 拆括号,枚举含有j个x,那么就是xj∗f[i−j]∗C ...

  8. 2019.01.04 bzoj2962: 序列操作(线段树+组合数学)

    传送门 线段树基础题. 题意:要求维护区间区间中选择ccc个数相乘的所有方案的和(c≤20c\le20c≤20),支持区间加,区间取负. 由于c≤20c\le20c≤20,因此可以对于每个线段树节点可 ...

  9. bzoj2962 序列操作

    2962: 序列操作 Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 1145  Solved: 378[Submit][Status][Discuss ...

  10. [BZOJ2962][清华集训]序列操作

    bzoj luogu 题意 有一个长度为\(n\) 的序列,有三个操作: \(I \ \ a\ b\ c\ :\)表示将\([a,b]\)这一段区间的元素集体增加\(c\): \(R \ \ a\ b ...

随机推荐

  1. 用户'sa'登录失败(错误18456)解决方案图解

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://thenear.blog.51cto.com/4686262/865544 htt ...

  2. Linux多线程编程的条件变量

    在stackoverflow上看到一关于多线程条件变量的问题,题主问道:什么时候会用到条件变量,mutex还不够吗?有个叫slowjelj的人做了很好的回答,我再看这个哥们其他话题的一些回答,感觉水平 ...

  3. MacOS 修改主机名

    修改主机名 sudo scutil --set HostName xxx 修改共享名 sudo scutil --set ComputerName xxx

  4. 深入理解spring国际化

    深入理解spring国际化 转自http://blog.csdn.net/ethan_fu/article/details/45621337

  5. 左儿子右兄弟Trie UVA 11732 strcmp() Anyone?

    题目地址: option=com_onlinejudge&Itemid=8&category=117&page=show_problem&problem=2832&qu ...

  6. EasyRTMP实现的rtmp推流的基本协议流程

    EasyRTMP介绍 EasyRTMP是结合了多种音视频缓存及网络技术的一个rtmp直播推流端,包括:圆形缓冲区(circular buffer).智能丢帧.自动重连.rtmp协议等等多种技术,能够非 ...

  7. Darwin Streaming Server性能测试报告

    为了验证Darwin Streaming Server在流媒体点播上的性能,EasyDarwin开源项目官方特地与国内某大型视频网站进行了一次性能测试(千兆网络环境下),针对本次RTSP直播流媒体测试 ...

  8. 2015年度新增开源软件排名TOP 100,EasyDarwin开源流媒体服务器排名第17

    本榜单包含 2015 年开源中国新收录的 5977 款开源软件中,根据软件本身的关注度.活跃程度进行排名前 100 名的软件.从这份榜单中或许可以了解到最新业界的趋势. 榜单详情:http://www ...

  9. 九度OJ 1134:密码翻译 (翻译)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1988 解决:810 题目描述: 在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报 ...

  10. java之插入排序

    //插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始有序表只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个 ...