4430: [Nwerc2015]Guessing Camels赌骆

Description

Jaap, Jan, and Thijs are on a trip to the desert after having attended the ACM ICPC World Finals 2015 in Morocco. The trip included a camel ride, and after returning from the ride, their guide invited them to a big camel race in the evening. The camels they rode will also participate and it is customary to bet on the results of the race.
One of the most interesting bets involves guessing the complete order in which the camels will finish the race. This bet offers the biggest return on your money, since it is also the one that is the hardest to get right.
Jaap, Jan, and Thijs have already placed their bets, but the race will not start until an hour from now, so they are getting bored. They started wondering how many pairs of camels they have put in the same order. If camel cc is before camel d on Jaap's, Jan's and Thijs' bet, it means that all three of them put c and d in the same order. Can you help them to calculate the number of pairs of camels for which this happened?
Jaap,Jan和Thijs在摩洛哥参加完ACMICPC2015全球总决赛后去沙漠进行了一次旅行。旅行包括了骑骆驼。在骑完回来之后,他们的向导邀请他们在晚上去看一场盛大的骆驼赛跑。他们骑的骆驼也会参加,而赌比赛的结果是一个习惯。其中一个最有趣的赌涉及猜测完成比赛的骆驼的完整名单。这个赌可以为你赢得最多的钱,因为它也是最难猜对的。
Jaap,Jan和Thijs已经下了注,但比赛要在一个小时后才开始,所以他们觉得很无聊。他们开始想知道有多少对骆驼他们赌了同样的顺序。如果在他们三人的猜测名单中,骆驼c在骆驼d前,就意味着c和d在他们的名单中有相同的顺序。你能帮他们计算有多少对骆驼是这样的吗?

Input

The input consists of:
one line with an integer n ( 2≤n≤200000), the number of camels;
one line with n integers a1,…,ana1,…,an ( 1≤ai≤n for all i ), Jaap's bet. Here a1 is the camel in the first position of Jaap's bet, a2 is the camel in the second position, and so on;
one line with Jan's bet, in the same format as Jaap's bet;
one line with Thijs' bet, in the same format as Jaap's bet.
The camels are numbered 1,…,n . Each camel appears exactly once in each bet.
输入包括:
第一行是一个整数n(2<=n<=200000),骆驼的数量。
第二行有n个整数a1…an(1<=ai<=n),是Jaap的下赌名单。a1是名单中第一位,a2是第二位,等等。
第三行是Jan的名单,格式同上。
第四行是Thijs的名单,格式同上。
骆驼从1到n编号,每头骆驼在一份名单中只出现一次。

Output

Output the number of pairs of camels that appear in the same order in all 3 bets.
输出在三份名单中同样顺序的骆驼有多少对。

Sample Input

Sample input 1
3
3 2 1
1 2 3
1 2 3
Sample input 2
4
2 3 1 4
2 1 4 3
2 4 3 1

Sample Output

Sample output 1
0
Sample output 2
3
题解:
先考虑怎么算两个序列不相同的(i,j)个数。
使用树状数组,用id[i]记录a[i]在a数组中的位置,然后倒着循环,在a数组中以b[i]结尾的个数就是1到i的前缀和,更新就是在id[b[i]]的位置加1,为什么是这样呢???
我们是从尾开始枚举的,这样假如这个数在a数组中有b数组之后位置的数,那么就是有问题的。
然后发现ans=(n*(n-1)-不相同数)/2
#include<stdio.h>
#include<iostream>
using namespace std;
const int N=;
int n,i,a[N],b[N],c[N],t[N],p[N];
long long ans;
void update(int x)
{
while(x<=n)
{
t[x]++;
x+=x&-x;
}
}
int solve(int x)
{
int ans=;
while(x>)
{
ans+=t[x];
x-=x&-x;
}
return ans;
}
int main()
{
scanf("%d",&n);
for(i=;i<=n;i++) scanf("%d",&a[i]);
for(i=;i<=n;i++) scanf("%d",&b[i]);
for(i=;i<=n;i++) scanf("%d",&c[i]);
for(i=;i<=n;i++) p[a[i]]=i;
for(i=n;i>=;i--)
{
ans+=solve(p[b[i]]);
update(p[b[i]]);
}
for(i=;i<=n;i++) p[b[i]]=i,t[i]=;
for(i=n;i>=;i--)
{
ans+=solve(p[c[i]]);
update(p[c[i]]);
}
for(i=;i<=n;i++) p[c[i]]=i,t[i]=;
for(i=n;i>=;i--)
{
ans+=solve(p[a[i]]);
update(p[a[i]]);
}
cout<<((1LL*n*(n-)-ans)>>);
return ;
}

bzoj 4430: [Nwerc2015]Guessing Camels赌骆驼的更多相关文章

  1. 【BZOJ】4430: [Nwerc2015]Guessing Camels赌骆驼

    [题意]给定三个长度为n的排列,求在三个排列中顺序相同的数对个数. [算法]逆序对 [题解]很容易联想到NOIP火柴排队,涉及顺序问题显然和逆序对息息相关. 一个数对如果在三个排列中顺序不同,一定是1 ...

  2. bzoj4430 [Nwerc2015]Guessing Camels赌骆驼

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4430 [题解] 把每只骆驼在第一个人.第二个人.第三个人的位置找出来,然后做三维偏序即可. ...

  3. BZOJ 4430 Guessing Camels赌骆驼

    [题意概述] 给出三个n的排列,求有多少个数对在三个排列中顺序相同 [题解] 考虑用补集转化的方法,答案为总对数-不满足的对数 一对数不满足条件,当且仅当这对数在两个排列中顺序相同,在另一个排列中的顺 ...

  4. BZOJ 4430 Guessing Camels

    Description Jaap, Jan, and Thijs are on a trip to the desert after having attended the ACM ICPC Worl ...

  5. bzoj 4428: [Nwerc2015]Debugging调试

    4428: [Nwerc2015]Debugging调试 Description Your fancy debugger will not help you in this matter. There ...

  6. 【容斥原理】【推导】【树状数组】Gym - 101485G - Guessing Camels

    题意:给你三个1~n的排列a,b,c,问你在 (i,j)(1<=i<=n,1<=j<=n,i≠j),有多少个有序实数对(i,j)满足在三个排列中,i都在j的前面. 暴力求的话是 ...

  7. BZOJ 4425: [Nwerc2015]Assigning Workstations分配工作站

    难度在于读题 #include<cstdio> #include<algorithm> #include<queue> using namespace std; p ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. 越狱Season 1-Episode 13: End of the Tunnel

    Season 1, Episode 13: End of the Tunnel -Fernando: The name is John Abruzzi. 名字是John Abruzzi A b r u ...

随机推荐

  1. ipython notebook环境搭建

    默认已经装好python基本环境,再进行下面步骤: 1. 下载安装IPython:  c:>pip.exe install ipython 系统就会去网上寻找ipython的包, 进行下载及安装 ...

  2. Spark-2.3.2【SparkStreaming+SparkSQL-实时仪表盘应用】

    应用场景:实时仪表盘(即大屏),每个集团下有多个mall,每个mall下包含多家shop,需实时计算集团下各mall及其shop的实时销售分析(区域.业态.店铺TOP.总销售额等指标)并提供可视化展现 ...

  3. 在linux程序里面,知道一个函数地址,改函数是属于某个动态库的,怎么样得到这个动态库的全【转】

    转自:http://www.360doc.com/content/17/1012/11/48326749_694292472.shtml 另外dl_iterate_phdr可以查到当前进程所装在的所有 ...

  4. HDU 5117 Fluorescent

    题目链接:HDU-5117 题意为有n盏灯,m个开关,每个开关控制着\( k_{i} \)灯.X为最后亮着的灯的个数,要求出\( E(X^{3} ) * 2^{M} mod (10^9 + 7) \) ...

  5. 2015多校第6场 HDU 5361 并查集,最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...

  6. JavaScript实现Fly Bird小游戏

    1.分析页面结构,理清需求和功能 游戏有三个界面,分别是开始界面,游戏界面和游戏结束界面. 1.1 开始界面 start.gif 游戏的大背景 上下移动的游戏标题和翅膀摆动的小鸟 start 按钮,点 ...

  7. FS Shell命令

    HDFS命令基本格式 hadoop fs -cmd args hdfs dfs -cmd args cat hadoop fs -cat URI [URI .....] 将路径指定文件的内容输出到st ...

  8. golang-指针,函数,map

    指针 普通类型变量存的就是值,也叫值类型.指针类型存的是地址,即指针的值是一个变量的地址.一个指针只是值所保存的位置,不是所有的值都有地址,但是所有的变量都有.使用指针可以在无需知道变量名字的情况下, ...

  9. python在windows下连接mysql数据库

    一,安装MySQL-python python 连接mysql数据库需要 Python interface to Mysql包,包名为 MySQL-python ,PyPI上现在到了1.2.5版本.M ...

  10. 前端读者 | 如何判断Javascript对象是否存在

    本文来自@阮一峰 Javascript语言的设计不够严谨,很多地方一不小心就会出错. 举例来说,请考虑以下情况. 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明.用自然语言 ...