CF 993E Nikita and Order Statistics

2023-05-16

          • 传送门
          • 题目大意
          • 思路
          • 参考代码

传送门
题目大意

给你一个数组 a1n a 1 ∼ n ,对于 k=0n k = 0 ∼ n ,求出有多少个数组上的区间满足:区间内恰好有 k k 个数比 x 小。 x x 为一个给定的数。

n2×105。值域没有意义。

思路

一眼看到标签写着 FFT……

把所有小于 x x 的数记为 1,剩下的数记为 0 0 ,则题目要求的是有多少个区间有 k 1 1 。对这个 01 数组求前缀和,设为 s s ,则题目要求的是有多少个 (l,r)(lr) 满足 srsl1=k s r − s l − 1 = k

现在相当于有一个长度为 n+1 n + 1 ​ 的数组 s s ​ ,满足 sisi+1si+1 s i ≤ s i + 1 ≤ s i + 1 ​ ,问两个元素的差的取值的情况数。设多项式 f f ​ xi x i ​ 项的系数等于 sk=i s k = i ​ k k ​ 的个数,设多项式 g g ​ xi x − i ​ 项的系数等于 sk=i s k = i ​ k k ​ 的个数。对 f f ​ g g ​ 做卷积,则积的 xk(k>0) x k ( k > 0 ) ​ 的系数就是对应的答案。当 k=0 k = 0 ​ 时,首先要减去自己卷上自己的 n+1 n + 1 ​ 次,然后再除以二,就是对应的答案。

时间复杂度 O(nlogn) O ( n log ⁡ n )

参考代码
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <cassert>
#include <cctype>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <bitset>
#include <list>
#include <functional>
typedef long long LL;
typedef unsigned long long ULL;
using std::cin;
using std::cout;
using std::endl;
typedef LL INT_PUT;
INT_PUT readIn()
{
    INT_PUT a = 0; bool positive = true;
    char ch = getchar();
    while (!(ch == '-' || std::isdigit(ch))) ch = getchar();
    if (ch == '-') { positive = false; ch = getchar(); }
    while (std::isdigit(ch)) { a = a * 10 - (ch - '0'); ch = getchar(); }
    return positive ? -a : a;
}
void printOut(INT_PUT x)
{
    char buffer[20]; int length = 0;
    if (x < 0) putchar('-'); else x = -x;
    do buffer[length++] = -(x % 10) + '0'; while (x /= 10);
    do putchar(buffer[--length]); while (length);
}

typedef long double REAL;
const REAL PI = std::acos((REAL)-1);
const int maxn = int(2e5) + 5;
int n, x;
int a[maxn];

struct Complex
{
    REAL x, y;
    Complex() {}
    Complex(REAL x, REAL y) : x(x), y(y) {}
    Complex operator+(const Complex& b) const
    {
        return Complex(x + b.x, y + b.y);
    }
    Complex operator-(const Complex& b) const
    {
        return Complex(x - b.x, y - b.y);
    }
    Complex operator*(const Complex& b) const
    {
        return Complex(x * b.x - y * b.y, x * b.y + y * b.x);
    }
    void operator/= (const REAL& b)
    {
        x /= b;
        y /= b;
    }
};
void DFT(Complex* a, int logn, bool IDFT)
{
    int pre = -1;
    static int revbit[1 << 20];
    int n = 1 << logn;
    if (logn != pre)
    {
        pre = logn;
        revbit[0] = 0;
        for (int i = 1; i < n; i++)
            revbit[i] = (revbit[i >> 1] >> 1) | ((i & 1) << (logn - 1));
    }
    for (int i = 0; i < n; i++)
        if (i < revbit[i])
            std::swap(a[i], a[revbit[i]]);

    for (int i = 1; i <= logn; i++)
    {
        int S = 1 << i;
        int half = S >> 1;
        Complex w1(std::cos(2 * PI / S), std::sin(2 * PI / S) * (IDFT ? -1 : 1));
        for (int j = 0; j < n; j += S)
        {
            Complex* A = a + j;
            Complex w(1, 0);
            for (int k = 0; k < half; k++)
            {
                Complex t = A[k + half] * w;
                A[k + half] = A[k] - t;
                A[k] = A[k] + t;
                w = w * w1;
            }
        }
    }

    if (IDFT)
        for (int i = 0; i < n; i++)
            a[i] /= n;
}

Complex A[1 << 20];
Complex B[1 << 20];

void run()
{
    n = readIn();
    x = readIn();
    for (int i = 1; i <= n; i++)
        a[i] = a[i - 1] + (readIn() < x);

    for (int i = 0; i <= n; i++)
    {
        A[n + a[i]].x++;
        B[n - a[i]].x++;
    }
    int logn = 0;
    while (1 << logn < n * 3) logn++;
    DFT(A, logn, false);
    DFT(B, logn, false);
    int N = 1 << logn;
    for (int i = 0; i < N; i++)
        A[i] = A[i] * B[i];
    DFT(A, logn, true);
    LL t;
    t = A[n << 1].x + 0.5;
    printOut((t - n - 1) >> 1);
    for (int i = 1; i <= n; i++)
    {
        putchar(' ');
        printOut(A[(n << 1) + i].x + 0.5);
    }
}

int main()
{
    run();
    return 0;
}

要是标签都不看就会做就好了。唉,谁叫我太弱了呢 QAQ。

一开始居然把 t 定义成 int 类型了,妥妥的爆零啊 QAQ。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CF 993E Nikita and Order Statistics 的相关文章

  • 对最后 X 秒内收到的值的平均值进行采样

    我有一个调度成功和失败事件的类 我需要维护该类最后 X 秒内的平均失败数 事件总数的统计数据 我正在考虑使用循环链表并为每个事件附加成功或失败节点 然后计算列表中故障节点的数量与总节点数 但这有两个主要缺点 我需要不断地放大 缩小列表大小
  • 如何将斯皮尔曼相关性 p 值以及相关系数添加到 ggpairs 中?

    使用以下代码在 R 中构建 ggpairs 图形 df 是一个数据帧 包含 6 个连续变量和 1 个Group多变的 ggpairs df 1 columns 1 ncol df 1 mapping ggplot2 aes colour d
  • 时间序列 - 相关性和滞后时间

    我正在研究一组输入变量和响应变量价格之间的相关性 这些都是按时间顺序排列的 1 我是否有必要平滑曲线其中输入变量是循环变量 自回归 如果是这样 怎么办 2 一旦建立相关性 我想准确量化输入变量如何影响响 应变量 例如 一旦 X 增加 gt
  • 性能测量的建模分布

    您如何对重复的现实生活性能测量的分布进行数学建模 现实生活 意味着您不仅仅是循环有问题的代码 而且它只是在典型用户场景中运行的大型应用程序中的一个简短片段 我的经验表明 平均执行时间通常会出现峰值 可以使用高斯分布对其进行充分建模 此外 还
  • 在 matplotlib 中绘制时,正态分布显得过于密集

    我正在尝试估计数据的概率密度函数 就我而言 数据是形状为 8200 x 8100 的卫星图像 下面 我向您展示 PDF 的代码 函数 is outlier 是由在此发布此代码的人借用的 正如我们所看到的 图 1 中的 PDF 过于密集 我想
  • 从一个原始整数列表生成打乱整数列表的算法

    有一个 ArrayList 为x unique Integers 我需要将它们随机分配y数组列表z尺寸 请记住 x y z是变量值 结果数组中的数字不能重复 结果列表不能包含相同的数字 订购它们必须不同 如果计算结果数组中的出现次数 则原始
  • 稳定地找到曲线的肘点?

    我知道存在this https stackoverflow com questions 4033821 using a smoother with the l method to determine the number of k mean
  • NumPy:计算累积中位数

    我有大小 n 的样本 我想计算每个 i 1 sample i 在 numpy 例如 我计算了每个 i 的平均值 cummean np cumsum sample np arange 1 n 1 我可以在没有循环和理解的情况下对中位数做类似的
  • 如何从颠倒的钟形曲线中采样

    我可以使用下面的代码生成均匀分布的数字 runif 1 min 10 max 20 如何对更频繁地接近最小和最大边界的随机生成的数字进行采样 又名 颠倒的钟形曲线 钟形曲线通常是高斯曲线 这意味着它没有最小值和最大值 你可以尝试贝塔分布 h
  • R、Python 或 Octave:具有置信区间的经验分位数(逆 cdf)?

    我正在寻找一个返回样本分位数的内置函数和估计的置信区间在 MATLAB 以外的地方 MATLAB 的ecdf做这个 我猜 R 有这个内置功能 只是我还没有找到它 如果您有任何独立代码可以执行此操作 您也可以在此处指出它 尽管我希望找到作为更
  • R 直方图中的确切箱数

    我在 R 中制作直方图时遇到困难 问题是我告诉它制作 5 个容器 但它制作了 4 个 我告诉它制作 5 个 它制作了 8 个 data lt c 5 28 14 64 37 25 78 9 44 92 8 96 19 22 34 81 33
  • 如何在 R 中重新格式化表格?

    我加载了一个这样的表 V1 V2 V3 pat1 1 2 pat1 3 1 pat1 4 2 pat2 3 3 pat3 1 4 pat3 2 3 我需要将其格式化为如下所示 其中 V1 表示行 V2 表示列 V3 中的值 1 2 3 4
  • 了解 T-SQL stdev、stdevp、var 和 varp

    我很难理解这些统计函数的作用以及它们的工作原理 我很难理解 stdev 与 stdevp 以及 var 等价物的工作原理 有人可以帮我把这些分解成愚蠢的吗 在统计学中 标准差和方差是衡量总体中的指标偏离平均值 通常是平均值 的程度 标准差定
  • 分类变量的多重共线性

    对于数值 连续数据 为了检测预测变量之间的共线性 我们使用皮尔逊相关系数并确保预测变量之间不相关 但与响应变量相关 但我们怎样才能检测到多重共线性如果我们有一个数据集 其中预测变量都是绝对的 我正在共享一个数据集 我试图找出预测变量是否相关
  • 监控 REST API 的最佳方式是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我创建了一个基于 RESTful 模式的 API 我想知道监视它的最佳方法是什么 我可以以某种方式收集每个请求的统计信息以及我可以监控
  • 在 Perl 中如何计算给定正态分布的点的概率?

    Perl 中是否有一个包可以让您计算每个给定点的概率分布高度 例如 这可以在 R 中以这种方式完成 gt dnorm 0 mean 4 sd 10 gt 0 03682701 即x 0点服从正态分布 mean 4 sd 10的概率为0 03
  • 如何确定一系列循环数据中的高值和低值?

    我有一些代表周期性运动的数据 所以 它从高点到低点 然后又回来 如果你要绘制它 它就像一个正弦波 然而 每个周期的幅度略有不同 我想列出整个序列中的每个最大值和最小值 如果有 10 个完整的周期 我最终会得到 20 个数字 其中 10 个为
  • R 中卡方的事后测试

    我有一张看起来像这样的桌子 gt dput theft loc structure c 13704L 14059L 14263L 14450L 14057L 15503L 14230L 16758L 15289L 15499L 16066L
  • 在循环中预测.lm()。警告:排名不足的拟合预测可能会产生误导

    此 R 代码引发警告 Fit regression model to each cluster y lt list length y lt k vars lt list length vars lt k f lt list length f
  • 大熊猫群体中的百分位排名

    我不太清楚如何编写函数来完成分组百分位数 我将 1985 年至 2012 年的所有球队都放在一个数据框中 前 10 个如下所示 目前按年份排序 我想给一个百分位LgRnk分组依据Year 例如 1985 年的 23 LgRank 最差球队

随机推荐

  • CF 977F Consecutive Subsequence

    传送门思路参考代码 传送门 思路 CF 的第一场 div3 xff0c 在我提交了一份有错的代码后突然不能提交了 xff0c 在跑什么 System Testing xff0c 我就跟它杠上了 xff0c 直到它评测完 唉 xff0c 我太
  • CF 7D Palindrome Degree

    传送门思路参考代码 传送门 思路 不是马拉车加随便 DP 乱搞 xff1f 本来想复习一下马拉车的 xff0c 结果拉出了许多事端 xff08 修复了 OI Learner Judge 的严重 bug 一个害我调了两节课的 bug xff0
  • Luogu 3822 [NOI 2017] 整数

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 当年网同这道题还拿了 16 16 分 xff0c 现在一分都不会做了 xff0c 唉 xff0c 我太弱啦 xff01 这道题其实是很不错的 x
  • 【Go】go语言中切片的长度变化后容量的变化

    一 新增信息长度 43 当前长度 lt 61 当前容量 span class token keyword func span span class token function printSlice span span class toke
  • APIO 2018 Practice Session T1 Wedding cake

    没有传送门题目大意思路参考代码熟悉环境 没有传送门 题目大意 给你一个长度为 n n 的正整数序列 a i ai xff0c 要求构造出 n n 个小数 使得它们的和为 1 1 xff0c 且每个数小数点后恰好有
  • APIO 2018 Practice Session T3 / CF 936C Lock Puzzle

    传送门题目大意思路参考代码总结 传送门 题目大意 给你一个字符串 origin xff0c 一个字符串 target xff0c 长度均为 n n 要求在 3 n 3n xff08 5 2 n 5 2
  • APIO 2018 游记

    Day 0Day 1Day 2Day 3Day 4 Day 0 早上 4 4 点就上车去机场赶那 7 7 点的飞机 感觉很困 xff0c 所以在飞机上就这么睡过去了 北京是个好地方 xff0c 但是与我无关 下飞机后 xff0c 我们一行人
  • Luogu 2375 [NOI 2014] 动物园

    文章目录 传送门思路参考代码Review 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 连 KMP 也不会 xff0c WA 飞了 xff0c 唉 xff0c 我太弱啦 xff01 首先 xff0c 原始的 K
  • Luogu 2114 [NOI 2014] 起床困难综合症

    传送门思路参考代码 传送门 思路 按位贪心 但是我太弱了 xff0c 明明可以 O n O n 预处理 xff0c 我却只会 O 32 n O
  • Luogu 2354 [NOI 2014] 随机数生成器

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 这么一个傻逼题 xff0c 我却看成了要你构造一种交换方案使得答案最小 xff0c 结果后面的额外交换是题目给定的 唉 xff0c 我太弱啦 x
  • Luogu 2305 [NOI 2014] 购票

    传送门思路别人家的题解弱化的传送门 xff08 Luogu 3994 高速公路 xff09 参考代码 对于没有距离限制的 50 分 参考代码 对于 100 分的数据参考代码Remarks 传送门 思路 唉 xff0c 我太弱了 xff0c
  • Luogu 1224 [NOI 2013] 向量内积

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 听都没有听说过这类题 xff0c 唉 xff0c 我太弱啦 xff01 显然这道题可以在 O n 2 d O n 2
  • Luogu 1397 [NOI 2013] 矩阵游戏

    传送门思路正解参考代码Remarks 传送门 思路 唉 xff0c 我太弱了 xff0c T1 都做不来 xff0c 唉 xff0c 我太弱啦 xff01 显然这个题可以用矩阵快速幂在 O log n O log n
  • Luogu 2414 [NOI 2011] 阿狸的打字机

    文章目录 传送门思路参考代码总结 传送门 思路 首先我们甚至不能单独保存每个字符串 xff0c 因为总长度可以达到 O n 2
  • kali新手入门教学(10)--ping的讲解

    Ping 是 Windows 和 Linux 都自带的一个扫描工具 xff0c 用于校验与远程计算机或本机的连接 只有在安装 TCP IP 协议之后才能使用该命令 Ping 命令通过向计算机发送 ICMP 回应 报文并且监听回应报文的返回
  • Luogu 3628 [APIO 2010] 特别行动队

    传送门思路参考代码 传送门 BZOJ 思路 设 f i f i 表示将 1 i 1 i 的士兵编
  • Luogu 1399 [NOI 2013] 快餐店

    传送门思路参考代码Remarks总结 传送门 思路 发现这是一棵环套树 那首先我们会想到树上的情况 如果这是一棵树 xff0c 我们自然会联想到树的直径 xff0c 自然会想到对于树而言 xff0c 答案为直径长度的一半 证明 用反证法 假
  • GDB for C++ in Linux

    这篇文章主要讲讲如何在 Linux 下使用 GDB xff0c 当然 xff0c 就指令而言在 Windows 下也适用 环境Items 编译启动退出加载文件查看源代码断点 插入断点删除断点 运行程序查看变量控制程序执行 继续下一步单步进入
  • CF 1000F One Occurrence

    传送门题目大意思路参考代码总结 时光如梭 xff0c Codeforces 的题号还是三位数的时代已经过去 xff1b 量子语言原来已经来临 传送门 题目大意 给定一个长度为 n n 的序列 a a xff0c 有 m m 个
  • CF 993E Nikita and Order Statistics

    传送门题目大意思路参考代码 传送门 题目大意 给你一个数组 a 1 n a 1 n xff0c 对于 k 61 0 n