博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF993E Nikita and Order Statistics
阅读量:6221 次
发布时间:2019-06-21

本文共 1241 字,大约阅读时间需要 4 分钟。

小于x的赋值为1,否则为0

区间等于k的个数

求0~n连续的n+1个k?

N<=1e5?

FFT!

考虑卷积建模:用下标相加实现转移到位,数值相乘类比乘法原理!

法一:

分治,然后FFT没了

法二:

不分治也可以!区间查询->前缀相减

ans[j-i]=f[j]*f[i],f[i]表示数值为i的前缀和个数

减法怎么办?

reverse变成加法!

i->n-i

ans[j-i]=f[j]*f[i]=f[j]*f'[n-i]

FFT一下,n+j-i位置的值就是ans辣

#include
#define reg register int#define il inline#define numb (ch^'0')using namespace std;typedef long long ll;il void rd(int &x){ char ch;x=0;bool fl=false; while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb); (fl==true)&&(x=-x);}namespace Miracle{const double Pi=acos(-1);const int N=2e5+5;struct po{ double x,y; po(){} po(double xx,double yy){ x=xx;y=yy; } po friend operator +(po a,po b){ return po(a.x+b.x,a.y+b.y); } po friend operator -(po a,po b){ return po(a.x-b.x,a.y-b.y); } po friend operator *(po a,po b){ return po(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x); }}a[4*N],b[4*N];int c[N],s[N];int n,x;int rev[4*N];ll ans[N];void fft(po *f,int c){ for(reg i=0;i
>1]>>1)|((i&1)?(n>>1):0); }// for(reg i=1;i<=lp;++i){// cout<
<<" ";// }cout<

 

reverse想法比较有意思!

值得注意!

 

转载于:https://www.cnblogs.com/Miracevin/p/10186902.html

你可能感兴趣的文章
第一次修改:pxe无人值守网络安装redhat linux系统脚本
查看>>
开发者必备,超实用的PHP代码片段!
查看>>
doker 1.12-runc源码逻辑跳转流程分析
查看>>
servlet
查看>>
经典(java版)排序算法的分析及实现之二希尔排序
查看>>
Ping延时测试报告:你的WAN链路有多慢
查看>>
linux优化tcp连接
查看>>
Kafka集群扩容遇到的问题
查看>>
mysql小白练手
查看>>
我的友情链接
查看>>
配置web服务器
查看>>
简单的服务端口检测及报警
查看>>
windows 2008 无法设置IP问题
查看>>
phpstorm的swoole代码提示安装
查看>>
make与makefile
查看>>
我的友情链接
查看>>
敏捷开发思想及Scrum实践
查看>>
几套好用的主题
查看>>
linux下文件删除的原理
查看>>
系统安全
查看>>