[JZOJ5498]【清华集训2017模拟12.10】大佬的难题
Description
给出三个1~n的排列a,b,c
求
\sum\limits_{1\leq i,j\leq n}[a_i
n<=2e6
Solution
就是求长方体内的点的个数
很容易想到的是排序,然后扫描,用二维数据结构或者分治+数据结构维护
这样的复杂度是O(Nlog2N)O(N\log^2N)的
发掘此题的特殊性,a,b,c都是排列
那么考虑将三维数点转化成二维数点
可以容斥
对于下标对(x,y),我们先不考虑顺序,那么a,b,c中要么全部满足,要么满足两个
如果将这两个排列两两放在一起数,那么就可以容斥了
即设Pa,b=∑i,j[ai<aj][bi<bj]P_{a,b}=\sum\limits_{i,j}[a_i
考虑Pa,b+Pb,c+Pa,cP_{a,b}+P_{b,c}+P_{a,c}
这三种加起来,那么只满足两个的情况算了一遍,全部满足的情况算了3遍
S=\sum\limits_{1\leq i,j\leq n}[a_i
S1=\sum\limits_{1\leq i,j\leq n}[a_i
那么S+S1就是全部的情况,3∗S+S1=Pa,b+Pb,c+Pa,c3*S+S1=P_{a,b}+P_{b,c}+P_{a,c}
成功转化为二维数点问题,排序+树状数组解决
Code
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fod(i,a,b) for(int i=a;i>=b;i--)
#define N 2000005
#define LL long long
using namespace std;
int a[N],b[N],c[N],n,s[N];
LL seed,dl;
LL rnd()
{return seed=((seed*(LL)19260817)^(LL)233333)&dl;
}
struct node
{int x,y;friend bool operator <(node x,node y){return x.x<y.x;}
}a1[N];
void gen(int *a)
{fo(i,1,n) a[i]=i;fo(i,1,n) swap(a[i],a[rnd()%i+1]);
}
int lowbit(int k)
{return k&(-k);
}
void put(int k)
{while(k<=n) s[k]++,k+=lowbit(k);
}
LL fd(int k)
{LL s1=0;while(k) s1+=s[k],k-=lowbit(k);return s1;
}
LL get(int *a,int *b)
{fo(i,1,n) a1[i].x=a[i],a1[i].y=b[i];sort(a1+1,a1+n+1);memset(s,0,sizeof(s));LL ans=0;fo(i,1,n) ans+=fd(a1[i].y-1),put(a1[i].y);return ans;
}
int main()
{freopen("dalao.in","r",stdin);freopen("dalao.out","w",stdout);dl=(1<<24)-1;cin>>n;scanf("%lld",&seed),gen(a);scanf("%lld",&seed),gen(b);scanf("%lld",&seed),gen(c);LL ans=get(a,b)+get(b,c)+get(c,a)-(LL)n*(LL)(n-1)/2;printf("%lld\n",ans/2);
}
[JZOJ5498]【清华集训2017模拟12.10】大佬的难题相关推荐
- JZOJ5498. 【清华集训2017模拟12.10】大佬的难题
Sample Input Sample Input1: 4 201334450 1474105774 350932494 Sample Input2: 97670 1734691087 7596883 ...
- jzoj5498 【清华集训2017模拟12.10】大佬的难题 巧妙容斥
分治容斥都想了,但想不出正解.. 先说60分的吧 先排序a,然后在b,c上分治. 我们将b两边归并的同时,用数据结构维护b比当前小的c都在哪些地方. 这样就是n log2 n 再说说正解 记a[x] ...
- JZOJ 5489. 【清华集训2017模拟11.28】海明距离
Description 设有一长度为n的初始每个位置均为0的序列A.再给定一个长度为n的01序列B. 有Q个特殊的区间[li,ri],你可以选择将A中li到ri这些位置都变为1,当然你可以选择不变. ...
- JZOJ 5484. 【清华集训2017模拟11.26】快乐树
Description 一棵树有n个节点,编号为0到n-1.有一条叫Owaski的狗在树上面走,每一次它可以从一个顶点走到它的任何一个相邻顶点.每个顶点有个可正可负的快乐度,Owaski也有一个快乐度 ...
- JZOJ 5483. 【清华集训2017模拟11.26】简单路径
Description 给定一棵带边权的树,选择两条没有公共边的简单路径(长度可以为0),使得所有在任意一条路径上的边的异或和尽量大. Input 第一行一个数n表示点数,点的编号是0到n-1. 接下 ...
- JZOJ 5490. 【清华集训2017模拟11.28】图染色
Description Input 第一行包括两个整数N,M. 接下来M行每行两个整数u,v,代表存在一条里连接 u,v的无向边.可能存在重边自环. Output 降序输出所有不为0的F(i) .保留 ...
- 【清华集训2017模拟】Catalan
Description 求Cnmod3814697265625(518)C_n \mod 3814697265625(5^{18})其中CnC_n为卡特兰数第n项 n<=10^18,T<= ...
- Loj #2324. 「清华集训 2017」小 Y 和二叉树
Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...
- [LOJ#2329]「清华集训 2017」我的生命已如风中残烛
[LOJ#2329]「清华集训 2017」我的生命已如风中残烛 试题描述 九条可怜是一个贪玩的女孩子. 这天她在一堵墙钉了 \(n\) 个钉子,第 \(i\) 个钉子的坐标是 \((x_i,y_i)\ ...
最新文章
- 博士生4篇高分论文参加答辩,却遭评委批评:你写的太多了
- 3D姿态估计|时序卷积+半监督训练
- ping: unknown host www.baidu.com问题解决
- php提示行号,在php中使用trigger_错误时如何获得正确的行号?
- 借助LDA主题分析的短文本相似性计算 - 综述帖
- 文巾解题 136. 只出现一次的数字
- Shell第二篇:正则表达式和文本处理工具
- STM32 Flash详解
- initrd in linux 2.6.32.27
- 谷歌金山词霸最终版下载地址公布
- steam游戏图标失效_如何将非Steam游戏添加到Steam并应用自定义图标
- 为什么程序员 996 会猝死,而老板 007 却不会? ​
- Java进阶 - MyBatis查询数据库 Spring Boot 单元测试 - 细节狂魔
- 数据库底层原理-------数据结构
- Biaofun分享给你什么是文案?
- 打印出一个数的每一位
- 2022数学建模国赛B题思路分析
- create connection SQLException, url: jdbc:mysqlAccess denied for user ‘CC‘@‘localhost‘ (using passwo
- HDU 2190 悼念512汶川大地震遇难同胞——重建希望小学
- cocos2d-x-3.3-023-仿微信飞机大战-总体分析和建模
热门文章
- element-ui 上传图片后清空图片显示
- 1分钟快速了解MindMapper 与MindManager间的不同点
- JS一元运算符(前++,后++)详解
- java编写分数加减法_JAVA 分数加减法
- MT6129射频处理器,MT6129芯片原理资料介绍
- 车规级需要满足哪些规范?
- 预告 | 10月北京,工信部人才交流中心5G行业应用系列培训全面开启
- 2022全新Java学习路线图动力节点(七)架构师必备技术
- 《Enhanced Deep Residual Networks for Single Image Super-Resolution》论文阅读之EDSR
- 2048【浙江工商大学oj】