博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 3509: [CodeChef] COUNTARI] [分块 生成函数]
阅读量:6922 次
发布时间:2019-06-27

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

题意:统计满足\(i<j<k, 2*a[j] = a[i] + a[k]\)的个数


\(2*a[j]\)不太好处理,暴力fft不如直接暴力

考虑分块

每个块用生成函数统计j在块中ik在两边的块中的

有两个在块中或者三个都在暴力统计,实时维护两边权值出现次数

#include 
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int N = (1<<16) + 5, M = 1e5+5;const double PI = acos(-1.0);inline int read() { char c=getchar(); int x=0,f=1; while(c<'0'||c>'9') {if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();} return x*f;}struct meow{ double x, y; meow(double a=0, double b=0):x(a), y(b){}};meow operator +(meow a, meow b) {return meow(a.x+b.x, a.y+b.y);}meow operator -(meow a, meow b) {return meow(a.x-b.x, a.y-b.y);}meow operator *(meow a, meow b) {return meow(a.x*b.x-a.y*b.y, a.x*b.y+a.y*b.x);}meow conj(meow a) {return meow(a.x, -a.y);}typedef meow cd;namespace fft { int n, rev[N]; cd omega[N], omegaInv[N]; void init(int lim) { n = 1; while(n < lim) n <<= 1; for(int i=0; i
>1]>>1) | ((i&1)<<(k-1)); if(i < rev[i]) swap(a[i], a[rev[i]]); } for(int l=2; l<=n; l<<=1) { int m = l>>1; for(cd *p = a; p != a+n; p += l) for(int k=0; k
= 0) ans += c2[t]; t = (a[i]<<1) - a[j]; if(t >= 0) ans += c1[t]; } c1[a[i]]++; } //printf("hi [%d, %d] %lld\n", l, r, ans); } for(int l=1; l<=n; l+=block) { //printf("l %d\n", l); int r = min(n, l+block-1); memset(p, 0, sizeof(p)); memset(q, 0, sizeof(q)); for(int i=1; i

转载地址:http://qehcl.baihongyu.com/

你可能感兴趣的文章
hibernate 查询条件 对象expression
查看>>
分布式事务
查看>>
Linux就该这么学 - 第四课 - 打包压缩~第3章重定向与环境变量
查看>>
简单的单臂路由的 配置实验(华为)
查看>>
技术和商业的碰撞,谈阿里云与天猫双11这十年
查看>>
智能家居应该怎样来维护和保养—成都首脑智能家居项目
查看>>
C语言100个经典算法源码片段
查看>>
精美流程图模板分享
查看>>
Cobbler
查看>>
手机照片误删怎么恢复?这两种专业方法可以试试看
查看>>
Struts2之2.5.10.1HelloWorld
查看>>
我的友情链接
查看>>
angularjs-常用angular函数
查看>>
我们如何来轻松部署Exchange
查看>>
模板实现双向链表
查看>>
浅谈RUP的9个核心工作流(Core Workflows)
查看>>
Android开发之布局
查看>>
子层div浮动导致父层无法自适应高度的解决方法
查看>>
Linux 系统/运维面试总结
查看>>
Java对象的浅克隆
查看>>