BZOJ 4836: [Lydsy1704月赛]二元运算 分治FFT
Code:
#include<bits/stdc++.h>
#define ll long long
#define maxn 500000
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
const double pi=acos(-1.0);
struct cpx
{
double x,y;
cpx(double a=0,double b=0) {x=a,y=b; }
cpx operator+(const cpx b) { return cpx(x+b.x,y+b.y); }
cpx operator-(const cpx b) { return cpx(x-b.x,y-b.y); }
cpx operator*(const cpx b) { return cpx(x*b.x-y*b.y,x*b.y+y*b.x); }
}A[maxn],B[maxn];
void FFT(cpx *a,int n,int flag)
{
for(int i=0,k=0;i<n;++i)
{
if(i>k) swap(a[i],a[k]);
for(int j=n>>1;(k^=j)<j;j>>=1);
}
for(int mid=1;mid<n;mid<<=1)
{
cpx wn(cos(pi/mid), flag*sin(pi/mid)),x,y;
for(int i=0;i<n;i+=(mid<<1))
{
cpx w(1,0);
for(int j=0;j<mid;++j,w=w*wn) x=a[i+j],y=w*a[i+j+mid],a[i+j]=x+y,a[i+j+mid]=x-y;
}
}
if(flag==-1) for(int i=0;i<n;++i) a[i].x/=(double)n;
}
int n,m;
int arr[maxn],brr[maxn],bucka[maxn],buckb[maxn];
ll answer[maxn];
void solve(int l,int r)
{
if(l==r) { answer[0]+=1ll*bucka[l]*buckb[l]; return; }
int mid=(l+r)>>1,len,a=0,b=0;
for(len=1;len<=(r-l+1);len<<=1);
for(int i=0;i<=len;++i) A[i].x=B[i].x=A[i].y=B[i].y=0;
for(int i=l;i<=mid;++i) A[a++].x=bucka[i];
for(int i=mid+1;i<=r;++i) B[b++].x=buckb[i];
FFT(A,len,1),FFT(B,len,1);
for(int i=0;i<len;++i) A[i]=A[i]*B[i];
FFT(A,len,-1);
for(int i=mid+1+l;i<=mid+r;++i) answer[i]+=(ll)(A[i-mid-1-l].x+0.5);
for(int i=0;i<=len;++i) A[i].x=A[i].y=B[i].x=B[i].y=0;
for(int i=mid+1;i<=r;++i) A[i-mid-1].x=bucka[i];
for(int i=l;i<=mid;++i) B[mid-i]=buckb[i];
FFT(A,len,1),FFT(B,len,1);
for(int i=0;i<len;++i) A[i]=A[i]*B[i];
FFT(A,len,-1);
for(int i=0;i<=r-l;++i) answer[i+1]+=(ll)(A[i].x+0.5);
solve(l,mid), solve(mid+1,r);
}
void work()
{
memset(bucka,0,sizeof(bucka));
memset(buckb,0,sizeof(buckb));
memset(answer,0,sizeof(answer));
int q,Max=0;
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;++i) scanf("%d",&arr[i]),Max=max(Max,arr[i]);
for(int i=1;i<=m;++i) scanf("%d",&brr[i]),Max=max(Max,brr[i]);
for(int i=1;i<=n;++i) bucka[arr[i]]++;
for(int i=1;i<=m;++i) buckb[brr[i]]++;
solve(0,Max);
for(int i=1;i<=q;++i)
{
int x;
scanf("%d",&x);
printf("%lld\n",answer[x]);
}
}
int main()
{
// setIO("input");
int T;
scanf("%d",&T);
for(int i=1;i<=T;++i) work();
return 0;
}
BZOJ 4836: [Lydsy1704月赛]二元运算 分治FFT的更多相关文章
- bzoj 4836 [Lydsy1704月赛]二元运算 分治FFT+生成函数
[Lydsy1704月赛]二元运算 Time Limit: 8 Sec Memory Limit: 128 MBSubmit: 577 Solved: 201[Submit][Status][Di ...
- bzoj 4836: [Lydsy2017年4月月赛]二元运算 -- 分治+FFT
4836: [Lydsy2017年4月月赛]二元运算 Time Limit: 8 Sec Memory Limit: 128 MB Description 定义二元运算 opt 满足 现在给定一 ...
- BZOJ4836 [Lydsy1704月赛]二元运算 分治 多项式 FFT
原文链接http://www.cnblogs.com/zhouzhendong/p/8830036.html 题目传送门 - BZOJ4836 题意 定义二元运算$opt$满足 $$x\ opt\ y ...
- 【bzoj4836】[Lydsy2017年4月月赛]二元运算 分治+FFT
题目描述 定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b ,接下来有 q 次询问.每次询问给定一个数字 c 你需要求出有多少对 (i, j) 使得 a_ ...
- [BZOJ4836]二元运算(分治FFT)
4836: [Lydsy1704月赛]二元运算 Time Limit: 8 Sec Memory Limit: 128 MBSubmit: 578 Solved: 202[Submit][Stat ...
- BZOJ4836: [Lydsy1704月赛]二元运算
BZOJ4836: [Lydsy1704月赛]二元运算 https://lydsy.com/JudgeOnline/problem.php?id=4836 分析: 分开做,维护两个桶. 分治每次求\( ...
- BZOJ4836: [Lydsy1704月赛]二元运算【分治FFT】【卡常(没卡过)】
Description 定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b ,接下来有 q 次询问.每次询问给定一个数字 c 你需要求出有多少对 (i, j) 使 ...
- BZOJ 4555: [Tjoi2016&Heoi2016]求和 [分治FFT 组合计数 | 多项式求逆]
4555: [Tjoi2016&Heoi2016]求和 题意:求\[ \sum_{i=0}^n \sum_{j=0}^i S(i,j)\cdot 2^j\cdot j! \\ S是第二类斯特林 ...
- bzoj 4831 [Lydsy1704月赛]序列操作 dp
[Lydsy1704月赛]序列操作 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 203 Solved: 69[Submit][Status][Dis ...
随机推荐
- Delphi XE2 之 FireMonkey 入门(23) - 数据绑定: TBindingsList: TBindExpression
准备用 TBindingsList 重做上一个例子. 可以先把 TBindingsList 理解为是一组绑定表达式(TBindExpression)的集合;官方应该是提倡在设计时完成 TBindExp ...
- Android Studio 连接夜神模拟器
网上找到的解决是需要我们 然后运行cmd命令,cd到夜神安装目录,执行命令 nox_adb.exe connect 127.0.0.1:62001
- 学习《Oracle PL/SQL 实例讲解 原书第5版》---创建student schema
接上篇,运行脚本createStudent.sql后结果不符. 又运行了一遍rebuildStudent.sql就好了. 图: 原来是这样的,还以为是语言问题: 额,本来是打算截图的.但是发现没问题了 ...
- 设置HTML中字体的粗细
设置font-weight 属性:normal : 默认值.正常的字体.相当于 400 .声明此值将取消之前任何设置bold : 粗体.相当于 700 .也相当于 b 对象的作用bolder : 比 ...
- css定位:相对定位、绝对定位、固定定位的区别与特性
css定位:相对定位.绝对定位.固定定位的区别与特性 原文地址:http://www.qingzhouquanzi.com/106.html css定位常用的有以下三种: 使用了定位的共同特性: 这三 ...
- Git-第三篇廖雪峰Git教程学习笔记(2)回退修改,恢复文件
1.工作区 C:\fyliu\lfyTemp\gitLocalRepository\yangjie 2.版本库 我们使用git init命令创建的.git就是我们的版本库.Git的版本库里存了很多东西 ...
- 解决MarkDown打开出现:awesomium web-brower framework This view has crashed
当在windows 8 以上操作系统安装markdown 的时候,可能会出现这样的错误 解决方法: 官网链接:http://markdownpad.com/faq.html#livepreview-d ...
- ajax传文件用express的multer接住
html部分: //input type设为file <input type="file" name="file" id="fileInputE ...
- Codeforces 601B(贪心+斜率+组合数学+单调栈)
题面 传送门 题目大意: L(h)的值是区间[L,R]内,abs(h[i]-h[j])/(i-j)的最大值.现在有q个询问,每个询问表示询问区间[L,R]内,所有子序列的L(h)的值的和 分析 将|h ...
- java _static 关键字
• 在类中,用static声明的成员变量为静态成员变量 ,或者叫做: 类属性,类变量. • 它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化, • 对于该类的所有对象来说,s ...