bzoj 4836: [Lydsy2017年4月月赛]二元运算 -- 分治+FFT
4836: [Lydsy2017年4月月赛]二元运算
Time Limit: 8 Sec Memory Limit: 128 MB
Description
Input
Output
对于每次查询,输出一行,包含一个整数,表示满足条件的 (i, j) 对的个数。
Sample Input
2 1 5
1 3
2
1 2 3 4 5
2 2 5
1 3
2 4
1 2 3 4 5
Sample Output
0
1
0
0
1
0
1
0
1
HINT
Source
可能我的常数真的巨大。。。
转载一个姜大爷的题解http://blog.csdn.net/neither_nor/article/details/70889246
#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define inf 1000000007
#define ll long long
#define PI acos(-1)
#define M 400010
inline int rd()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
#define db double
struct cl{
db x,y;
cl(){}
cl(db _x,db _y){x=_x;y=_y;}
friend cl operator +(const cl &x,const cl &y){return cl(x.x+y.x,x.y+y.y);}
friend cl operator -(const cl &x,const cl &y){return cl(x.x-y.x,x.y-y.y);}
friend cl operator *(const cl &x,const cl &y){return cl(x.x*y.x-x.y*y.y,x.x*y.y+x.y*y.x);}
friend cl operator /(const cl &x,const db &y){return cl(x.x/y,x.y/y);}
cl con(){return cl(x,-y);}
};
cl a[M],b[M];
int n,L,R[M];
int A[M],B[M],mx,T;
ll ans[M];
void fft(cl *x,int f,int n)
{
for(int i=;i<n;i++) if(i<R[i]) swap(x[i],x[R[i]]);
for(int i=;i<n;i<<=)
{
cl wn(cos(PI/i),f*sin(PI/i));
for(int j=;j<n;j+=(i<<))
{
cl w(,),X,Y;
for(int k=;k<i;k++,w=w*wn)
{
X=x[j+k];Y=w*x[j+k+i];
x[j+k]=X+Y;x[j+k+i]=X-Y;
}
}
}
if(f==-) for(int i=;i<n;++i) x[i]=x[i]/n;
}
void cal(int l,int r,int n,int L)
{
if(l==r)
{
ans[]+=(ll)A[l]*B[l];
return ;
}
register int i,j,mid=l+r>>;
for(i=;i<n;++i) R[i]=(R[i>>]>>)|((i&)<<L);
for(i=;i<n;++i) a[i]=b[i]=cl(,);
for(i=l;i<=mid;++i) a[i-l].x=A[i];
for(i=mid+;i<=r;++i) a[i-mid-].y=B[i];
fft(a,,n);
for(i=;i<n;i++)
{
j=(n-i)&(n-);
b[i]=(a[i]*a[i]-(a[j]*a[j]).con())*cl(,-0.25);
}
fft(b,-,n);
for(i=;i<n;++i) ans[l+mid++i]+=(ll)(b[i].x+0.1); for(i=;i<n;++i) a[i]=b[i]=cl(,);
for(i=mid+;i<=r;i++) a[i-mid-].x=A[i];
for(i=l;i<=mid;i++) a[mid-i].y=B[i];
fft(a,,n);
for(i=;i<n;i++)
{
j=(n-i)&(n-);
b[i]=(a[i]*a[i]-(a[j]*a[j]).con())*cl(,-0.25);
}
fft(b,-,n);
for(i=;i<n;++i) ans[+i]+=(ll)(b[i].x+0.1); cal(l,mid,n>>,L-);
cal(mid+,r,n>>,L-);
}
int main()
{
register int n1,n2,q,i,x;
T=rd();
while(T--)
{
n1=rd();n2=rd();q=rd();mx=;
memset(A,,sizeof(A));
memset(B,,sizeof(B));
memset(ans,,sizeof(ans));
for(i=;i^n1;++i)
{
x=rd();A[x]++;
mx=max(mx,x);
}
for(i=;i^n2;i++)
{
x=rd();B[x]++;
mx=max(mx,x);
}
for(n=,L=-;n<(mx<<);n<<=) L++;
cal(,n-,n,L);
while(q--)
{
x=rd();
printf("%lld\n",ans[x]);
}
}
return ;
}
bzoj 4836: [Lydsy2017年4月月赛]二元运算 -- 分治+FFT的更多相关文章
- 【bzoj4836】[Lydsy2017年4月月赛]二元运算 分治+FFT
题目描述 定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b ,接下来有 q 次询问.每次询问给定一个数字 c 你需要求出有多少对 (i, j) 使得 a_ ...
- BZOJ 4881: [Lydsy2017年5月月赛]线段游戏
4881: [Lydsy2017年5月月赛]线段游戏 Time Limit: 3 Sec Memory Limit: 256 MBSubmit: 164 Solved: 81[Submit][St ...
- bzoj 4836 [Lydsy1704月赛]二元运算 分治FFT+生成函数
[Lydsy1704月赛]二元运算 Time Limit: 8 Sec Memory Limit: 128 MBSubmit: 577 Solved: 201[Submit][Status][Di ...
- bzoj4836 [Lydsy2017年4月月赛]二元运算
Description 定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b ,接下来有 q 次询问.每次询问给定一个数字 c 你需要求出有多少对 (i, j) ...
- bzoj 4885: [Lydsy2017年5月月赛]长方体
Description 给定一个a*b*c的长方体,定义其表面上两个点的距离为沿着长方体的表面走的最短路径的长度,请找到距离最远的点对,你需要保证找到的两个点里至少有一个是长方体顶点. Input 第 ...
- BZOJ 4883 [Lydsy2017年5月月赛]棋盘上的守卫(最小生成环套树森林)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4883 [题目大意] 在一个n*m的棋盘上要放置若干个守卫. 对于n行来说,每行必须恰好 ...
- BZOJ 4884 [Lydsy2017年5月月赛]太空猫(单调DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4884 [题目大意] 太空猫(SpaceCat)是一款画面精致.玩法有趣的休闲游戏, 你 ...
- BZOJ 4836: [Lydsy1704月赛]二元运算 分治FFT
Code: #include<bits/stdc++.h> #define ll long long #define maxn 500000 #define setIO(s) freope ...
- 【BZOJ 4832 】 4832: [Lydsy2017年4月月赛]抵制克苏恩 (期望DP)
4832: [Lydsy2017年4月月赛]抵制克苏恩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 275 Solved: 87 Descripti ...
随机推荐
- 搭建自己的PHP框架心得——转载
原文:http://www.cnblogs.com/zhenbianshu/p/5331165.html 前言 说到写PHP的MVC框架,大家想到的第一个词--“造轮子”,是的,一个还没有深厚功力的程 ...
- 离线下载pip包进行安装【转】
Host-A 不能上网,但是需要在上面安装Python-package 通过另外一台能上网的Host-B主机 1. 下载需要离线安装的Packages 在Host-B上执行如下命令: 安装单个Pack ...
- EF – 5.DbSet与DbContext,数据更新奥秘
5.6.4 <DbSet与DbContext> 介绍DbSet与DbContext中的核心属性及重要方法. 5.6.5 <数据更新的奥秘> 这一讲极为重要,因为它揭示出了En ...
- 元组tuple常用方法
元组tuple的功能类似与列表,元组有的功能,列表都有,列表有的,元组不一定有,下面来看看元组具有的功能: 1.count(self,value) count(self,value)统计元组中 ...
- chrome浏览器使用HTML5预览图片
chrome浏览器对HTML5支持的较好,使用HTML5的File相关的api,可以实现前台页面在选定图片后,不上传即可预览.代码如下: 1.前台代码,使用<input type="f ...
- ubuntu sublime text 3 build 3083 license
经验证:sublime text 3 3083可用 ----- BEGIN LICENSE -----Andrew WeberSingle User LicenseEA7E-855605813A03D ...
- Es6懒加载
const Login = resolve => require(['@/components/Login'], resolve) 注(当路由被访问的时候才加载这个组件)
- 洛谷P3812 【模板】线性基 [线性基]
题目传送门 线性基 题目描述 给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大. 输入输出格式 输入格式: 第一行一个数n,表示元素个数 接下来一行n个数 输出格式: 仅一行 ...
- CTF西湖论剑
一,西湖论剑 itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用 的基数.在上例中,转换基数为10.10:十进制:2:二进制... ...
- ssm demo,用户角色权限管理
SSM框架整合 Spring SpringMVC MyBatis 导包: 1, spring 2, MyBatis 3, mybatis-spring 4, fastjson 5, aspectwea ...