本题暴力做听说可以动态树,然而我不会。

3维偏序可以用CDQ分治,寒假学了然而考场上不会写。(菜不成声.jpg)

再间接一点,我们知道是用总数对减去存在逆序的数对。

而逆序就是求两个数列中的两个数字相对位置是反的。

如果我们队(a,b)(b,c)(a,c)都进行求逆序对。在三维中,只要满足一对与另外两对相对顺序不同即是不符合的。

一对数字不符合正序的在这样的统计中会对cnt贡献2次,那么就ans=C(n,2)-cnt/2

判断两个数列中一对数字相对顺序不同的方法是,先用d[x]=i存储x在A数组中所在的位置是i

在对B数组用归并排序或者树状数组统计,i-1-sum(d[B[i]]),即B数组的前i-1个数字在A数组对应有多少在d[B[i]]后面的。

cdq分治的坑留着以后补QAQ

#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxl 200010int n;
int aa[maxl],bb[maxl],cc[maxl],b[maxl],d[maxl];
long long ans;inline void prework()
{ans=0;for(int i=1;i<=n;i++)scanf("%d",&aa[i]);for(int i=1;i<=n;i++)scanf("%d",&bb[i]);for(int i=1;i<=n;i++)scanf("%d",&cc[i]);
}inline int sum(int i)
{int s=0;while(i){s+=b[i];i-=i&-i;}return s;
}inline void add(int i,int x)
{if(i==0) return;while(i<maxl){b[i]+=x;i+=i&-i;}
}inline void mainwork()
{for(int i=1;i<=n;i++)d[aa[i]]=i;memset(b,0,sizeof(b));for(int i=1;i<=n;i++){ans+=i-1-sum(d[bb[i]]);add(d[bb[i]],1);}for(int i=1;i<=n;i++)d[bb[i]]=i;memset(b,0,sizeof(b));for(int i=1;i<=n;i++){ans+=i-1-sum(d[cc[i]]);add(d[cc[i]],1);}for(int i=1;i<=n;i++)d[cc[i]]=i;memset(b,0,sizeof(b));for(int i=1;i<=n;i++){ans+=i-1-sum(d[aa[i]]);add(d[aa[i]],1);}
}void print()
{ans=((long long)n*(n-1)-ans)/2;printf("%lld\n",ans);
}int main()
{while(~scanf("%d",&n)){prework();mainwork();print();}return 0;
}

Gym - 101485G NWERC2015 G Guessing Camels相关推荐

  1. [BZOJ4430][Nwerc2015]Guessing Camels赌骆驼

    [Nwerc2015]Guessing Camels赌骆驼 Description Jaap, Jan, and Thijs are on a trip to the desert after hav ...

  2. bzoj 4430: [Nwerc2015]Guessing Camels赌骆驼

    4430: [Nwerc2015]Guessing Camels赌骆 Description Jaap, Jan, and Thijs are on a trip to the desert afte ...

  3. Guessing Camels

    题目链接:Guessing Camels 把每个数字在分别三个数组出现的位置当成三个维度的下标. 那么问题就变成一个三维偏序了,cdq分治即可. AC代码: #pragma GCC optimize( ...

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

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

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

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

  6. BZOJ 4430 Guessing Camels赌骆驼

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

  7. Codeforces Gym 100513G G. FacePalm Accounting 暴力

    G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...

  8. MOD - Power Modulo Inverted(SPOJ3105) + Clever Y(POJ3243) + Hard Equation (Gym 101853G ) + EXBSGS

    思路: 前两题题面相同,代码也相同,就只贴一题的题面了.这三题的意思都是求A^X==B(mod P),P可以不是素数,EXBSGS板子题. SPOJ3105题目链接:https://www.spoj. ...

  9. Gym 101246G Revolutionary Roads

    http://codeforces.com/gym/101246/problem/G 题意: 给出一个有向图,现在可以把图中的任意一条边改为无向边,问强连通分量最多可以有多少个点,在此情况下输出所有能 ...

最新文章

  1. 读书笔记:《搞定3--平衡工作和生活的艺术》
  2. GT Transceiver的复位与初始化(3)TX初始化和复位流程
  3. KMP算法的理解,伪代码,c代码实现
  4. openCV和Tensorflow起步
  5. java list 速度_Java中的List你真的会用吗?不会用的话请收藏我的这篇文章
  6. MvcPager帮助文档 - MvcAjaxOptions 类
  7. 对于计算机文化的总结,计算机文化基础一级总结
  8. 依附B2B平台照样做搜索营销
  9. 安防摄像头Onvif、RTSP、GB28181转web无插件直播卡顿分析
  10. Java-分析类初始化
  11. Program Library HOWTO(2)
  12. 6.剑指Offer --- 面试中的各项能力
  13. 机器学习课程笔记【十三】- 独立成分分析
  14. Android WindowManagerImpl杂谈
  15. java 网页 录音_Java+FlashWavRecorder实现网页录音并上传【新】
  16. 安卓10不支持qmc解码_百度云不限速下载,超级简单!亲测可用,IOS/安卓/电脑全支持...
  17. 途家供应链系统架构演进实践
  18. 【矩阵论】线性空间与线性变换(1)
  19. HTML+CSS+JavaScript实战——美团首页
  20. 中国用于先天性代谢错误的医用食品市场深度研究分析报告

热门文章

  1. jq简单实现五星好评
  2. IDEA中使用Git功能和IDEA中的Git分支管理
  3. indesign页眉如何左右分布_InDesign排版技巧
  4. java初级程序员考试_Java初级程序员必须要知道的10个基础面试题
  5. 矩阵正定 matlab,matlab 错误使用 chol 矩阵必须为正定矩阵
  6. 斐波那契数列 - 递推公式及通项公式 代码
  7. 零基础想学习Web安全,如何入门?
  8. Linux:《gzip》《bzip2》压缩解压
  9. 计算机安全应急演练简报,开封市网络安全应急演练表彰大会在计算机与信息工程学院举行...
  10. android7.1 jack-admin 报错