Gym - 101485G NWERC2015 G Guessing Camels
本题暴力做听说可以动态树,然而我不会。
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相关推荐
- [BZOJ4430][Nwerc2015]Guessing Camels赌骆驼
[Nwerc2015]Guessing Camels赌骆驼 Description Jaap, Jan, and Thijs are on a trip to the desert after hav ...
- bzoj 4430: [Nwerc2015]Guessing Camels赌骆驼
4430: [Nwerc2015]Guessing Camels赌骆 Description Jaap, Jan, and Thijs are on a trip to the desert afte ...
- Guessing Camels
题目链接:Guessing Camels 把每个数字在分别三个数组出现的位置当成三个维度的下标. 那么问题就变成一个三维偏序了,cdq分治即可. AC代码: #pragma GCC optimize( ...
- 【容斥原理】【推导】【树状数组】Gym - 101485G - Guessing Camels
题意:给你三个1~n的排列a,b,c,问你在 (i,j)(1<=i<=n,1<=j<=n,i≠j),有多少个有序实数对(i,j)满足在三个排列中,i都在j的前面. 暴力求的话是 ...
- 【BZOJ】4430: [Nwerc2015]Guessing Camels赌骆驼
[题意]给定三个长度为n的排列,求在三个排列中顺序相同的数对个数. [算法]逆序对 [题解]很容易联想到NOIP火柴排队,涉及顺序问题显然和逆序对息息相关. 一个数对如果在三个排列中顺序不同,一定是1 ...
- BZOJ 4430 Guessing Camels赌骆驼
[题意概述] 给出三个n的排列,求有多少个数对在三个排列中顺序相同 [题解] 考虑用补集转化的方法,答案为总对数-不满足的对数 一对数不满足条件,当且仅当这对数在两个排列中顺序相同,在另一个排列中的顺 ...
- Codeforces Gym 100513G G. FacePalm Accounting 暴力
G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...
- MOD - Power Modulo Inverted(SPOJ3105) + Clever Y(POJ3243) + Hard Equation (Gym 101853G ) + EXBSGS
思路: 前两题题面相同,代码也相同,就只贴一题的题面了.这三题的意思都是求A^X==B(mod P),P可以不是素数,EXBSGS板子题. SPOJ3105题目链接:https://www.spoj. ...
- Gym 101246G Revolutionary Roads
http://codeforces.com/gym/101246/problem/G 题意: 给出一个有向图,现在可以把图中的任意一条边改为无向边,问强连通分量最多可以有多少个点,在此情况下输出所有能 ...
最新文章
- 读书笔记:《搞定3--平衡工作和生活的艺术》
- GT Transceiver的复位与初始化(3)TX初始化和复位流程
- KMP算法的理解,伪代码,c代码实现
- openCV和Tensorflow起步
- java list 速度_Java中的List你真的会用吗?不会用的话请收藏我的这篇文章
- MvcPager帮助文档 - MvcAjaxOptions 类
- 对于计算机文化的总结,计算机文化基础一级总结
- 依附B2B平台照样做搜索营销
- 安防摄像头Onvif、RTSP、GB28181转web无插件直播卡顿分析
- Java-分析类初始化
- Program Library HOWTO(2)
- 6.剑指Offer --- 面试中的各项能力
- 机器学习课程笔记【十三】- 独立成分分析
- Android WindowManagerImpl杂谈
- java 网页 录音_Java+FlashWavRecorder实现网页录音并上传【新】
- 安卓10不支持qmc解码_百度云不限速下载,超级简单!亲测可用,IOS/安卓/电脑全支持...
- 途家供应链系统架构演进实践
- 【矩阵论】线性空间与线性变换(1)
- HTML+CSS+JavaScript实战——美团首页
- 中国用于先天性代谢错误的医用食品市场深度研究分析报告
热门文章
- jq简单实现五星好评
- IDEA中使用Git功能和IDEA中的Git分支管理
- indesign页眉如何左右分布_InDesign排版技巧
- java初级程序员考试_Java初级程序员必须要知道的10个基础面试题
- 矩阵正定 matlab,matlab 错误使用 chol 矩阵必须为正定矩阵
- 斐波那契数列 - 递推公式及通项公式 代码
- 零基础想学习Web安全,如何入门?
- Linux:《gzip》《bzip2》压缩解压
- 计算机安全应急演练简报,开封市网络安全应急演练表彰大会在计算机与信息工程学院举行...
- android7.1 jack-admin 报错