bzoj2962
线段树+卷积
这个东西直接算不太好,但是合并两段结果却很方便,假设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的更多相关文章
- 【BZOJ2962】序列操作(线段树)
[BZOJ2962]序列操作(线段树) 题面 BZOJ 题解 设\(s[i]\)表示区间内选择\(i\)个数的乘积的和 考虑如何向上合并? \(s[k]=\sum_{i=0}^klson.s[i]*r ...
- 【BZOJ2962】序列操作 线段树
[BZOJ2962]序列操作 Description 有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反 ...
- [bzoj2962]序列操作_线段树_区间卷积
序列操作 bzoj-2962 题目大意:给定一个n个数的正整数序列,m次操作.支持:1.区间加:2.区间取相反数:3.区间求选c个数的乘积和. 注释:$1\le n,m\le 5\cdot 10^4$ ...
- 【BZOJ-2962】序列操作 线段树 + 区间卷积
2962: 序列操作 Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 678 Solved: 246[Submit][Status][Discuss] ...
- bzoj2962 序列操作 题解
题目大意: 有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问[a,b]这 ...
- 序列操作 BZOJ2962 线段树
分析: 数据范围表示:c特别的小(c<20) 我们可以考虑nlogn*c^2的算法. 线段树维护区间信息:f[i]表示在[l,r]这段区间中选择i个数相乘的和. 因此,我们可以将区间看成一个点, ...
- 序列操作bzoj2962(未完成)
题解: 注意到k<=20;记录20个数f1...f20表示从选1-20个数的乘积分别为多少, 那么是一个(…+x)(…+x)……(…+x) 拆括号,枚举含有j个x,那么就是xj∗f[i−j]∗C ...
- 2019.01.04 bzoj2962: 序列操作(线段树+组合数学)
传送门 线段树基础题. 题意:要求维护区间区间中选择ccc个数相乘的所有方案的和(c≤20c\le20c≤20),支持区间加,区间取负. 由于c≤20c\le20c≤20,因此可以对于每个线段树节点可 ...
- bzoj2962 序列操作
2962: 序列操作 Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 1145 Solved: 378[Submit][Status][Discuss ...
- [BZOJ2962][清华集训]序列操作
bzoj luogu 题意 有一个长度为\(n\) 的序列,有三个操作: \(I \ \ a\ b\ c\ :\)表示将\([a,b]\)这一段区间的元素集体增加\(c\): \(R \ \ a\ b ...
随机推荐
- MySQL 下优化SQL语句的一些经验
http://java-guru.iteye.com/blog/143377
- Qt5的插件机制(6)--开发Qt插件时几个重要的宏
怎样开发Qt插件,能够在Qt Assistant 中搜索"Qt Plugins"或"How to Create Qt Plugins",看看那篇manual中的 ...
- 开始学习linux的一些疑问
Linux - Unix环境高级编程(第三版) 代码编译 https://www.linuxidc.com/Linux/2011-08/41228.htm ftp://ftp1.linuxidc.co ...
- TIP2
mktemp :建立暂存/临时文件 more to see 'man mktemp' 语 法 mktemp[选择参数] 功 能 mktemp 命令:用于建立暂存文件,提供给shell脚本安全的使用临时 ...
- Redis 过期键的设置、获取和删除过期时间
Redis 过期键的设置.获取和删除过期时间 转自http://blog.51cto.com/littledevil/1813956 设置过期 默认情况下键是没有生存时间的,也就是永不过期,除非清空内 ...
- 提高sqlite 的运行性能(转载)
原文地址: https://blog.devart.com/increasing-sqlite-performance.html One the major issues a developer en ...
- hsv hsb rgb lab
lab 欧式距离 反映 人类所能感受到的这两种颜色的差异
- 基于地理位置信息的traceroute
我们在机房选择.測试网络的质量的时候,往往仅仅依据跳数.延迟.抖动.网络吞吐量等指标来衡量,非常多时候跳数并不能全然显示网络拓扑优劣,于是写了个traceroute结合whois的小脚本来直观显示每一 ...
- 关于ActiveMQ接收端停止接收的方法
现在有一个需求: 在发送端服务器出现故障后,接收端的接收方法要停下来,关于停止接收的方法,我做了下面这些事情: // 获取 ConnectionFactory ConnectionFactory co ...
- [自动化平台系列] - 初次使用 Macaca-前端自动化测试(1)
1. 所先看一下官方地址,了解一下这个是不是你想要的测试工具 https://macacajs.github.io/macaca/environment-setup.html 2. 去掉sudo -- ...