线段树+卷积

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

线段树维护即可

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N = 2e5 + ;
  4. const double pi = acos(-);
  5. int n, len, ans, suma, sumb, mx = -1e9, m;
  6. struct data {
  7. double x, y;
  8. data() {}
  9. data(double _x, double _y) : x(_x), y(_y) {}
  10. data friend operator - (const data &a, const data &b) {
  11. return data(a.x - b.x, a.y - b.y);
  12. }
  13. data friend operator + (const data &a, const data &b) {
  14. return data(a.x + b.x, a.y + b.y);
  15. }
  16. data friend operator * (const data &a, const data &b) {
  17. return data(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
  18. }
  19. } a[N], b[N];
  20. void fft(data *a, int len, int f) {
  21. int n = << len;
  22. for(int i = ; i < n; ++i) {
  23. int t = ;
  24. for(int j = ; j < len; ++j) {
  25. if(i & ( << j)) {
  26. t |= << (len - j - );
  27. }
  28. }
  29. if(i < t) {
  30. swap(a[i], a[t]);
  31. }
  32. }
  33. for(int l = ; l <= n; l <<= ) {
  34. int m = l >> ;
  35. data w = data(cos(pi / m), f * sin(pi / m));
  36. for(int i = ; i < n; i += l) {
  37. data t = data(, );
  38. for(int k = ; k < m; ++k, t = t * w) {
  39. data x = a[k + i], y = t * a[i + k + m];
  40. a[k + i] = x + y;
  41. a[i + m + k] = x - y;
  42. }
  43. }
  44. }
  45. }
  46. int main() {
  47. scanf("%d%d", &n, &m);
  48. for(int i = ; i <= n; ++i) {
  49. scanf("%lf", &a[i].x);
  50. suma += a[i].x;
  51. }
  52. for(int i = ; i <= n; ++i) {
  53. scanf("%lf", &b[i].x);
  54. b[i + n].x = b[i].x;
  55. sumb += b[i].x;
  56. }
  57. int c = floor((double)(sumb - suma) / n + 0.5);
  58. for(int i = ; i <= n; ++i) {
  59. a[i].x += c;
  60. ans += a[i].x * a[i].x + b[i].x * b[i].x;
  61. }
  62. reverse(b + , b + * n + );
  63. for(; << len <= * n; ++len);
  64. fft(a, len, );
  65. fft(b, len, );
  66. for(int i = ; i < << len; ++i) {
  67. a[i] = a[i] * b[i];
  68. }
  69. fft(a, len, -);
  70. for(int i = n + ; i <= * n + ; ++i) {
  71. a[i].x /= ( << len);
  72. mx = max(mx, (int)(a[i].x + 0.1));
  73. }
  74. printf("%d\n", ans - * mx);
  75. return ;
  76. }

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. MySQL 下优化SQL语句的一些经验

    http://java-guru.iteye.com/blog/143377

  2. Qt5的插件机制(6)--开发Qt插件时几个重要的宏

    怎样开发Qt插件,能够在Qt Assistant 中搜索"Qt Plugins"或"How to Create Qt Plugins",看看那篇manual中的 ...

  3. 开始学习linux的一些疑问

    Linux - Unix环境高级编程(第三版) 代码编译 https://www.linuxidc.com/Linux/2011-08/41228.htm ftp://ftp1.linuxidc.co ...

  4. TIP2

    mktemp :建立暂存/临时文件 more to see 'man mktemp' 语 法 mktemp[选择参数] 功 能 mktemp 命令:用于建立暂存文件,提供给shell脚本安全的使用临时 ...

  5. Redis 过期键的设置、获取和删除过期时间

    Redis 过期键的设置.获取和删除过期时间 转自http://blog.51cto.com/littledevil/1813956 设置过期 默认情况下键是没有生存时间的,也就是永不过期,除非清空内 ...

  6. 提高sqlite 的运行性能(转载)

    原文地址: https://blog.devart.com/increasing-sqlite-performance.html One the major issues a developer en ...

  7. hsv hsb rgb lab

    lab  欧式距离 反映 人类所能感受到的这两种颜色的差异

  8. 基于地理位置信息的traceroute

    我们在机房选择.測试网络的质量的时候,往往仅仅依据跳数.延迟.抖动.网络吞吐量等指标来衡量,非常多时候跳数并不能全然显示网络拓扑优劣,于是写了个traceroute结合whois的小脚本来直观显示每一 ...

  9. 关于ActiveMQ接收端停止接收的方法

    现在有一个需求: 在发送端服务器出现故障后,接收端的接收方法要停下来,关于停止接收的方法,我做了下面这些事情: // 获取 ConnectionFactory ConnectionFactory co ...

  10. [自动化平台系列] - 初次使用 Macaca-前端自动化测试(1)

    1. 所先看一下官方地址,了解一下这个是不是你想要的测试工具 https://macacajs.github.io/macaca/environment-setup.html 2. 去掉sudo -- ...