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

  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define dob complex<double>
  4. using namespace std;
  5. const double pi = acos(-1.0);
  6. const int N = (200000<<2)+5;
  7. int n, m, x, sum[N], u, R[N], L, len, cnt[N];
  8. dob a[N], b[N];
  9. void FFT(dob *A, int o) {
  10. for (int i = 0; i < len; i++) if (i < R[i]) swap(A[i], A[R[i]]);
  11. for (int i = 1; i < len; i <<= 1) {
  12. dob wn(cos(pi/i), sin(pi*o/i)), x, y;
  13. for (int j = 0; j < len; j += (i<<1)) {
  14. dob w(1, 0);
  15. for (int k = 0; k < i; k++, w *= wn) {
  16. x = A[j+k], y = w*A[j+k+i];
  17. A[j+k] = x+y, A[j+k+i] = x-y;
  18. }
  19. }
  20. }
  21. }
  22. void work() {
  23. scanf("%d%d", &n, &x); cnt[0]++;
  24. for (int i = 1; i <= n; i++) {
  25. scanf("%d", &u), sum[i] = sum[i-1]+(u < x);
  26. cnt[sum[i]]++;
  27. }
  28. for (int i = 0; i <= n; i++) a[i] = cnt[i];
  29. for (int i = 0; i <= n; i++) b[i] = cnt[n-i];
  30. m = (n<<1);
  31. for (len = 1; len <= m; len <<= 1) ++L;
  32. for (int i = 0; i < len; i++) R[i] = (R[i>>1]>>1|((i&1)<<(L-1)));
  33. FFT(a, 1), FFT(b, 1);
  34. for (int i = 0; i < len; i++) a[i] = a[i]*b[i];
  35. FFT(a, -1);
  36. printf("%I64d", (ll)(a[n].real()/len+0.5-n)>>1);
  37. for (int i = 1; i <= n; i++) printf(" %I64d" , (ll)(a[i+n].real()/len+0.5));
  38. }
  39. int main() {work(); return 0; }

[Codeforces 993E]Nikita and Order Statistics的更多相关文章

  1. Codeforces 993E Nikita and Order Statistics [FFT]

    洛谷 Codeforces 思路 一开始想偏想到了DP,后来发现我SB了-- 考虑每个\(a_i<x\)的\(i\),记录它前一个和后一个到它的距离为\(L_i,R_i\),那么就有 \[ an ...

  2. CF993E:Nikita and Order Statistics(FFT)

    Description 给你一个数组 $a_{1 \sim n}$,对于 $k = 0 \sim n$,求出有多少个数组上的区间满足:区间内恰好有 $k$ 个数比 $x$ 小.$x$ 为一个给定的数. ...

  3. CF993E Nikita and Order Statistics 【fft】

    题目链接 CF993E 题解 我们记小于\(x\)的位置为\(1\),否则为\(0\) 区间由端点决定,转为两点前缀和相减 我们统计出每一种前缀和个数,记为\(A[i]\)表示值为\(i\)的位置出现 ...

  4. CF993E Nikita and Order Statistics

    小于x的赋值为1,否则为0 区间等于k的个数 求0~n连续的n+1个k? N<=1e5? FFT! 考虑卷积建模:用下标相加实现转移到位,数值相乘类比乘法原理! 法一: 分治,然后FFT没了 法 ...

  5. CF993E Nikita and Order Statistics 多项式卷积 快速傅里叶变换

    题意: 给你一个数组a1~an,对于k=0~n,求出有多少个数组上的区间满足:区间内恰好有k个数比x小.x为一个给定的数.n<=10^5.值域没有意义. 分析: 大神们都说这道题是一个套路题,真 ...

  6. Codeforces 756C Nikita and stack

    Codeforces 756C Nikita and stack 题目大意: 给定一个对栈进行操作的操作序列,初始时序列上没有任何操作,每一次将一个本来没有操作的位置变为某一操作(push(x),po ...

  7. codeforces 637B B. Chat Order(map,水题)

    题目链接: B. Chat Order time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  8. CLRS:median and order statistics

    //maximum and minimum     暴力遍历 O(n) //i-th element dicide and conquer random_selected_partition     ...

  9. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

随机推荐

  1. DropDownList切换选择,服务器控件Repeater未更新

    将EnableViewState属性设置为false,这样禁止服务器控件使用视图状态,也就是禁止发送给浏览器HEML中的缓存副本, 每次都会使用新数据. 一旦页面的控件很多,频繁的传递控件状态值对网络 ...

  2. C# null,string.Empty,"",DBNull 的区别

    [null] null 在C# 中是一个关键字,表示不引用任何对象的空引用的文字值. null 是引用类型变量的默认值. 普通值类型不能为 null. null 在 VS 中定位不出来具体是怎么定义的 ...

  3. pageadmin CMS网站制作教程:栏目单页内容如何修改

    pageadmin CMS网站制作教程:栏目单页内容如何修改 一般情况下,如公司介绍,联系方式等介绍内页面都属于单页,单页内容可以直接在栏目设置界面进行修改,如下 1.对栏目单页内容进行设置,登录后台 ...

  4. 900. RLE Iterator

    Write an iterator that iterates through a run-length encoded sequence. The iterator is initialized b ...

  5. 換根lca

    假設我們要求u,v,在根為rt情況下的lca 則lca為lca(u,v),lca(u,rt),lca(v,rt)中的深度的最大值

  6. jzoj5804

    這道題n-m很小,可以從此入手 記f[i][j]為i個字符括號綜合為j的合法方案數 則第i個括號可以枚舉為(和),所以f[i][j]=f[i-1][j-1]+f[i-1][j+1],小心越界 再記a為 ...

  7. poj1269---直线位置关系

    题目大意:给你8个点,也就是两条直线,让你判断他们的位置关系 代码如下: #include <iostream> #include<cstdio> #include<cm ...

  8. QQ个人信息保护 | 攻的对面叫防

    近来我们愈来愈重视个人信息保护,当接到骚扰电话时,你心里或许在想(我手机号怎么又被别人知道的?别人是怎么知道我手机号的?),现在的时代,手机已或不可缺,QQ几乎每个人都在用.而有些人总想保护个人QQ资 ...

  9. SharedFile System Master Slave(共享文件系统)做ActiveMQ集群

    WINDOWS环境下:http://www.apache.org/dyn/closer.cgi?path=/activemq/apache-activemq/5.9.0/apache-activemq ...

  10. 组件基础—Vue学习笔记

    ammm学习Vue有好几天了,今天遇到难点所以打算写一点随笔加深印象. 一.首先最简单的创建组件 1全局组件   Vue.component() Vue.component('hello',{ tem ...