题目描述

  给你三个排列\(A,B,C\),求

\[\sum_{1\leq x,y\leq n}[a_x<a_y][b_x<b_y][c_x<c_y]
\]

  \(n\leq 2\times {10}^6\)

题解

  就是一个三位偏序。用CDQ分治可以做到\(O(n\log^2 n)\)。常熟小一点可以卡过。我在UOJ上面能跑过去。

  这道题只有一个特殊性质:\(A,B,C\)都是排列。

  我们记

\[\begin{align}
K_{x,y}&=[a_x<a_y]+[b_x<b_y]+[c_x<c_y]\\
S_{x,y}&=\max(K_{x,y},K_{y,x})\\
A&=\sum_{1\leq x\leq y\leq n}[S_{x,y}=3]\\
B&=\sum_{1\leq x\leq y\leq n}[S_{x,y}=2]\\
P_{a,b}&=\sum_{1\leq x,y\leq n}[a_x<a_y][b_x<b_y]\\
P_{a,c}&=\sum_{1\leq x,y\leq n}[a_x<a_y][c_x<c_y]\\
P_{b,c}&=\sum_{1\leq x,y\leq n}[b_x<b_y][c_x<c_y]\\
\end{align}
\]

  那么我们要求的答案就是\(A\)了。

  容易发现

\[\begin{align}
A+B&=\binom{n}{2}\\
3A+B&=P_{a,b}+P_{a,c}+P_{b,c}
\end{align}
\]

  原问题转化为二位偏序。

  用树状数组即可解决。

  时间复杂度:\(O(n\log n)\)

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<utility>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
ll seed;
ll rd()
{
return seed=((seed*19260817)^233333)&((1<<24)-1);
}
int n;
void gen(int *a)
{
int i;
for(i=1;i<=n;i++)
a[i]=i;
for(i=1;i<=n;i++)
swap(a[i],a[rd()%i+1]);
}
int a1[2000010];
int a2[2000010];
int a3[2000010];
int a[2000010];
int c[2000010];
void add(int x)
{
for(;x<=n;x+=x&-x)
c[x]++;
}
int sum(int x)
{
int s=0;
for(;x;x-=x&-x)
s+=c[x];
return s;
}
ll gao(int *a1,int *a2)
{
memset(c,0,sizeof c);
int i;
for(i=1;i<=n;i++)
a[a1[i]]=a2[i];
ll s=0;
for(i=1;i<=n;i++)
{
s+=sum(a[i]);
add(a[i]);
}
return s;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
scanf("%d",&n);
scanf("%lld",&seed);
gen(a1);
scanf("%lld",&seed);
gen(a2);
scanf("%lld",&seed);
gen(a3);
ll ans=0;
ans+=gao(a1,a2);
ans+=gao(a1,a3);
ans+=gao(a2,a3);
ans-=ll(n-1)*n/2;
ans/=2;
printf("%lld\n",ans);
return 0;
}

【XSY2714】大佬的难题 数学 树状数组的更多相关文章

  1. D 区间求和 [数学 树状数组]

    D 区间求和 题意:求 \[ \sum_{k=1}^n \sum_{l=1}^{n-k+1} \sum_{r=l+k-1}^n 区间前k大值和 \] 比赛时因为被B卡了没有深入想这道题 结果B没做出来 ...

  2. HDU 2492 Ping pong(数学+树状数组)(2008 Asia Regional Beijing)

    Description N(3<=N<=20000) ping pong players live along a west-east street(consider the street ...

  3. [CSP-S模拟测试]:天才绅士少女助手克里斯蒂娜(数学+树状数组)

    题目描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响. 选取显像管的任意一个平面,一开始平面内有个$n$电子,初始速度分别为$v_i$,定义飘升系数为$$\sum \li ...

  4. [CSP-S模拟测试]:Equation(数学+树状数组)

    题目描述 有一棵$n$个点的以$1$为根的树,以及$n$个整数变量$x_i$.树上$i$的父亲是$f_i$,每条边$(i,f_i)$有一个权值$w_i$,表示一个方程$x_i+x_{f_i}=w_i$ ...

  5. 「BZOJ1537」Aut – The Bus(变形Dp+线段树/树状数组 最优值维护)

    网格图给予我的第一反应就是一个状态 f[i][j] 表示走到第 (i,j) 这个位置的最大价值. 由于只能往下或往右走转移就变得显然了: f[i][j]=max{f[i-1][j], f[i][j-1 ...

  6. NOJ——1669xor的难题(详细的树状数组扩展—异或求和)

    [1669] xor的难题 时间限制: 1000 ms 内存限制: 65535 K 问题描述 最近Alex学长有个问题被困扰了很久,就是有同学给他n个数,然后给你m个查询,然后每个查询给你l和r(左下 ...

  7. HDU 5869 Different GCD Subarray Query 树状数组 + 一些数学背景

    http://acm.hdu.edu.cn/showproblem.php?pid=5869 题意:给定一个数组,然后给出若干个询问,询问[L, R]中,有多少个子数组的gcd是不同的. 就是[L, ...

  8. UVA 11610 Reverse Prime (数论+树状数组+二分,难题)

    参考链接http://blog.csdn.net/acm_cxlove/article/details/8264290http://blog.csdn.net/w00w12l/article/deta ...

  9. POJ 2464 Brownie Points II (树状数组,难题)

    题意:在平面直角坐标系中给你N个点,stan和ollie玩一个游戏,首先stan在竖直方向上画一条直线,该直线必须要过其中的某个点,然后ollie在水平方向上画一条直线,该直线的要求是要经过一个sta ...

随机推荐

  1. python读取/创建XML文件

    Python中定义了很多处理XML的函数,如xml.dom,它会在处理文件之前,将根据xml文件构建的树状数据存在内存.还有xml.sax,它实现了SAX API,这个模块牺牲了便捷性,换取了速度和减 ...

  2. 2019年DNS服务器速度排行榜

    第一名:DNSPod 不得不说腾讯自从收购了DNSPod后,无论是服务还是速度都有显著的提升,无论是访问速度还是解析速度都在国内是处于龙头大哥的地位,昔日的老大114的地位已经不保,作为腾讯旗下的公司 ...

  3. VMware vSphere 6 序列号

    vSphere 6 Hypervisor HY0XH-D508H-081U8-JA2GH-CCUM2 4C4WK-8KH8L-H85J0-UHCNK-8CKQ8 NV09R-2W007-08D38-C ...

  4. 七、Json格式的对象都可以通过遍历来获得里面的value值

  5. pandas删除某一列的方法

    方法一:直接del df['column-name'] 删除sub_grade_列, 输入del df['sub_grade_x'] 方法二:采用drop方法,有下面三种等价的表达式: 1. df= ...

  6. 用C# BigInteger实现的BigDecimal类,终于可以直接做四则运算了。

    https://code.google.com/p/dotnet-big-decimal/ 这是个BigDecimal类的开源项目,支持Operators +, - and *. 俺给改了改,加上了除 ...

  7. vue echarts 动态数据

    安装echarts依赖 npm install echarts -S 或者使用国内的淘宝镜像: 安装 npm install -g cnpm --registry=https://registry.n ...

  8. shell脚本--操作MySQL数据库

    其实就是一个很简单的套路,和其他语言差不多,首先连接数据库,然后在进行其他操作. 套路如下: #!/bin/bash mysql="mysql -uroot -proot" #连接 ...

  9. JavaScript中的各种X,Y,Width,Height

    在JavaScript DOM编程中,会接触很多很多很多关于浏览器的宽高,屏幕的宽高,元素的各种宽高,以及鼠标的坐标等,常常让人搞混.索性就写篇博客整理一下. case 1:鼠标的坐标 获取鼠标的坐标 ...

  10. python3 selenium webdriver 元素定位xpath定位骚操作

    源文http://www.cnblogs.com/qingchunjun/p/4208159.html By.xpath() 这个方法是非常强大的元素查找方式,使用这种方法几乎可以定位到页面上的任意元 ...