Description

题库链接

给你一个长度为 \(n\) 的序列 \(A\) ,和一个数 \(x\) ,对于每个 \(i= 0\sim n\) ,求有多少个非空子区间满足恰好有 \(i\) 个数 \(<x\) 。

\(1 \leq n \leq 2 \cdot 10^5\)

Solution

我们用 \([A_i<x]\) 做一个前缀和,显然这是单调递增的。记前缀和为 \(i\) 的个数为 \(f_i\) 。

显然对于 \(i=k,k\neq 0\) 答案就是

\[\sum_{i=0}^{n-k}f(i+k)f(i)\]

我们令 \(g(i)=f(n-i)\) ,那么答案就是

\[\sum_{i=0}^{n}f(i+k)g(n-i)\]

卷一下就好了,不过注意到是非空子集,所以对于 \(k=0\) 时要特判。

Code

#include <bits/stdc++.h>
#define ll long long
#define dob complex<double>
using namespace std;
const double pi = acos(-1.0);
const int N = (200000<<2)+5; int n, m, x, sum[N], u, R[N], L, len, cnt[N];
dob a[N], b[N]; void FFT(dob *A, int o) {
for (int i = 0; i < len; i++) if (i < R[i]) swap(A[i], A[R[i]]);
for (int i = 1; i < len; i <<= 1) {
dob wn(cos(pi/i), sin(pi*o/i)), x, y;
for (int j = 0; j < len; j += (i<<1)) {
dob w(1, 0);
for (int k = 0; k < i; k++, w *= wn) {
x = A[j+k], y = w*A[j+k+i];
A[j+k] = x+y, A[j+k+i] = x-y;
}
}
}
}
void work() {
scanf("%d%d", &n, &x); cnt[0]++;
for (int i = 1; i <= n; i++) {
scanf("%d", &u), sum[i] = sum[i-1]+(u < x);
cnt[sum[i]]++;
}
for (int i = 0; i <= n; i++) a[i] = cnt[i];
for (int i = 0; i <= n; i++) b[i] = cnt[n-i];
m = (n<<1);
for (len = 1; len <= m; len <<= 1) ++L;
for (int i = 0; i < len; i++) R[i] = (R[i>>1]>>1|((i&1)<<(L-1)));
FFT(a, 1), FFT(b, 1);
for (int i = 0; i < len; i++) a[i] = a[i]*b[i];
FFT(a, -1);
printf("%I64d", (ll)(a[n].real()/len+0.5-n)>>1);
for (int i = 1; i <= n; i++) printf(" %I64d" , (ll)(a[i+n].real()/len+0.5));
}
int main() {work(); return 0; }

最新文章

  1. spring定时任务(转载)
  2. Topology and Geometry in OpenCascade-Face
  3. 基于Bootstrap简单实用的tags标签插件
  4. android开发分辨率问题解决方案
  5. Linux和Linux之间共享目录
  6. Calendar中add函数和roll函数的用法及区别
  7. 《Qt编程的艺术》——5.1 手动布局
  8. isr
  9. jQuery checkbox 全选
  10. 安卓 异步线程更新Ui
  11. AsyncTask和Handler
  12. asp.net mvc 自动化测试工具
  13. 【ASP.NET MVC系列】浅谈表单和HTML辅助方法
  14. js 声明提升
  15. ES6随笔
  16. Node.js 反序列化漏洞远程执行代码(CVE-2017-5941)
  17. iOS开发 -------- AFNetworking使用中遇到的小问题
  18. 课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)—— 0、学习目标
  19. with admin option /with grant option
  20. My Magic Android Tour —— 处女作

热门文章

  1. spring注入是否会被回收
  2. 申请Let&#39;s Encrypt通配符HTTPS证书
  3. javascript中string与int之间的转换
  4. C#之使用AutoUpdater自动更新客户端
  5. js 利用数组实现类似于asp中的数据字典
  6. Asp.net MVC4 记录在线用户数及登录时长
  7. Dockerfile数据管理
  8. centos6下无法使用lsof命令&quot;-bash: lsof: command not found&quot;
  9. JDBC连接数据库7个步骤
  10. jQuery.extend 函数