cdq(2018.10.18)
一句话题意:给你三个数列{a_i},{b_i},{c_i},保证每个数列都恰好是一个排列。你需要求出满足\(a_i<a_j,b_i<b_j,c_i<c_j\)的有序对\((i,j)\)的数目。
提示:为了避免过量的输入对程序的运行效率产生影响,数列为生成的。
数据范围:
对于 100% 的数据,保证\(1≤n≤ 2*10^6\),
看似一个三维偏序,实际上cdq分治只能36分,还得卡常才能获得高于36分的好成绩。
事实上,因为这三个序列是排列,所以我们可以将其转化为3个二维偏序,如下:
\]
\]
\]
我们知道合法方案必定满足上面任意一个二维偏序,而不合法方案最多满足上面的一个二维偏序,因为如果满足两个,就能满足第三个。
所以可以设合法方案数为sum,不合法方案数为k
那么有:
\]
然后考虑怎么去掉不合法方案
我们知道每一个数对\((i,j)\)可能合法也可能不合法,所以所有的数对\((i,j)\)就包括\((sum+k)\),数对总数就是组合数啦\(C^2_n\)
代码:
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 2e6+5;
unsigned int SA,SB,SC;int n,d[N],b[N],c[N];
unsigned int rd(){
SA^=SA<<16;SA^=SA>>5;SA^=SA<<1;
unsigned int t=SA;SA=SB;SB=SC;SC^=t^SA;return SC;
}
void gen(int *P){
for (int i=1;i<=n;++i) P[i]=i;
for (int i=1;i<=n;++i) swap(P[i],P[1+rd()%n]);
}
#define mid ((l+r)>>1)
#define lowbit(i) (i&(-i))
int f[N];long long ans,x,y,z;
struct oo{int a,b,c;}a[N];
void add(int x){for(int i=x;i<=n;i+=lowbit(i))f[i]++;}
int get(int x){int ans=0;for(int i=x;i;i-=lowbit(i))ans+=f[i];return ans;}
bool cmp1(oo a,oo b){return a.a<b.a;}
bool cmp2(oo a,oo b){return a.b<b.b;}
int main()
{
scanf("%d%u%u%u",&n,&SA,&SB,&SC);
gen(d);gen(b);gen(c);
for(int i=1;i<=n;i++)a[i]=(oo){d[i],b[i],c[i]};
sort(a+1,a+n+1,cmp1);
for(int i=1;i<=n;i++)x+=get(a[i].b),add(a[i].b);
for(int i=1;i<=n;i++)f[i]=0;
for(int i=1;i<=n;i++)y+=get(a[i].c),add(a[i].c);
for(int i=1;i<=n;i++)f[i]=0;
sort(a+1,a+n+1,cmp2);
for(int i=1;i<=n;i++)z+=get(a[i].c),add(a[i].c);
ans=1ll*n*(n-1)/2;
printf("%lld\n",(x+y+z-ans)>>1);
}
cdq(2018.10.18)的更多相关文章
- 2018.10.18 bzoj1185: [HNOI2007]最小矩形覆盖(旋转卡壳)
传送门 不难看出最后的矩形一定有一条边与凸包某条边重合. 因此先求出凸包,然后旋转卡壳求出当前最小矩形面积更新答案. 代码: #include<bits/stdc++.h> #define ...
- hard(2018.10.18)
题意:给你一棵\(n\)个节点的树,\(q\)个询问,每次询问读入\(u,v,k,op\),需要满足树上有\(k\)对点的简单路径交都等于\(u,v\)之间的简单路径,\(op=1\)表示\(k\)对 ...
- 【2018.10.18】noip模拟赛Day2 地球危机(2018年第九届蓝桥杯C/C++A组省赛 三体攻击)
题目描述 三体人将对地球发起攻击.为了抵御攻击,地球人派出了 $A × B × C$ 艘战舰,在太 空中排成一个 $A$ 层 $B$ 行 $C$ 列的立方体.其中,第 $i$ 层第 $j$ 行第 $k ...
- 2018.10.18 NOIP训练 01矩阵(组合数学)
传送门 组合数学好题. 题目要求输出的结果成功把概率转化成了种类数. 本来可以枚举统计最小值为iii时的概率. 现在只需要统计最小值为iii时的方案数,每一行有不少于iii个1的方案数. 显然一行选i ...
- 2018.10.18 NOIP训练 [SCOI2018]Pipi 酱的日常(线段树)
传送门 线段树好题啊. 题目要求的是sum−a−b−c+maxsum-a-b-c+maxsum−a−b−c+max{∣a+v∣+∣b+v∣+∣c+v∣|a+v|+|b+v|+|c+v|∣a+v∣+∣b ...
- 2018.10.18 NOIP训练 ZUA球困难综合征(线段树)
传送门 考虑到模数等于7 * 13 * 17 * 19. 那么只需要维护四棵线段树求出每个数处理之后模7,13,17,197,13,17,197,13,17,19的值再用crtcrtcrt合并就行了. ...
- 2018.10.18 poj2187Beauty Contest(旋转卡壳)
传送门 旋转卡壳板子题. 就是求凸包上最远点对. 直接上双指针维护旋转卡壳就行了. 注意要时刻更新最大值. 代码: #include<iostream> #include<cstdi ...
- 2018.10.18 bzoj4105: [Thu Summer Camp 2015]平方运算(线段树)
传送门 线段树妙题. 显然平方几次就会循环(打表证明不解释). 然后所有环长度的lcmlcmlcm不大于70. 因此维护一下当前区间中的节点是否全部在环上. 不是直接暴力到叶子节点修改. 否则整体打标 ...
- 【2018.10.18】CXM笔记(动态规划)
1.给你一棵树,让你修任意多条点不相交的铁路(每条铁路都是一根链),定义一个点的代价为它到根节点的路径中不在铁路上的边数,求一种设计方案代价最大的点最小. 铁路点不相交与 每个点连出去的铁路条数 $\ ...
随机推荐
- Kotlin基本语法笔记之函数、变量的定义及null检测
定义函数 fun sum(a: Int, b: Int): Int { return a + b } 该函数中两个参数的类型都是Int,返回类型是Int 也可以做如下简化 fun sum(a: Int ...
- The PageFactory
The PageFactory 原文地址:https://github.com/SeleniumHQ/selenium/wiki/PageFactory In order to support the ...
- appium(8)-locator strategies
locator strategies Finding and interacting with elements Appium supports a subset of the WebDriver l ...
- Python 的枚举类型
起步 Python 中的枚举类型 Python 的原生类型中并不包含枚举类型.为了提供更好的解决方案,Python 通过 PEP 435 在 3.4 版本中添加了 enum 标准库. 枚举类型可以看作 ...
- DHCP request error:Timed out waiting for dhcpcd to start【转】
本文转载自:http://blog.csdn.net/zvivi521/article/details/9166899 [init.svc.dhcpcd_eth0]: [stopped] I/Serv ...
- android:textAppearance
Android之系统自带的文字外观设置及实际显示效果图 android:textAppearancexml布局里面设置文字的外观: 如“android:textAppearance=“?android ...
- 关于Spring MVC分页
使用Pageable接口,首先要实例化. 在servlet-context.xml中配置 <annotation-driven> <!-- 分页参数 --> <argum ...
- JAVA基础细谈
JAVA基础细谈 一. 源文件和编译后的类文件 源文件的本质就是程序文件,是程序员编写,是人看的.而编译后的类文件是给电脑看的文件.一个类就是一个文件,无论这个类写在哪里,编译以后都是一个文件 ...
- [转载]支付宝钱包手势密码破解实战(root过的手机可直接绕过手势密码)
/* *转自http://blog.csdn.net/hu3167343/article/details/36418063 *本文章由 莫灰灰 编写,转载请注明出处. *作者:莫灰灰 邮箱: m ...
- vi编辑器的使用(2)
1.4 光标移动 vi编辑器中的很多命令都是基于光标当前位置的,因此,如何移动光标定位到所需要的位置是一项十分重要的工作,下面进行详细介绍(如无特别说明,下面所讲的命令都是在普通模式下执行). 1. ...