COGS 2580. [HZOI 2015]偏序 II
COGS 2580. [HZOI 2015]偏序 II
题目传送门
  题目大意:给n个元素,每个元素有具有4个属性a,b,c,d,求i<j并且ai<aj,bi<bj,ci<cj,di<dj的i,j对数有多少?
  a,b,c,d均为1~n的排列,即不会有i,j使得ai=aj or bi=bj or ci=cj or di=dj。
题目是离线的,cdq分治可以很好的解决这一类问题。cdq套cdq套cdq再加个bit就行了。
第一层的cdq处理a,保证a有序,
第二层在第一层的基础上处理b,保证b有序,以此类推。
第三层最后处理d,将添加的加进bit,询问的查询1~d有多少个,累加进答案ans,最后反过来删掉加进去的。(相当于清空bit)
我写的是指针形的,代码会比较短……
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=50050;
struct data { int a,b,c,d,id; bool p; } D[4][N];
int n,px,T[N],ans;
bool cmp(data A,data B)
{
	if(px==1) return (A.a<B.a); else
	if(px==2) return (A.b<B.b); else
	if(px==3) return (A.c<B.c);
}
void add(int x,int v) { for(int i=x;i<=n;i+=(i&-i)) T[i]+=v; }
int sum(int x) { int Ans=0; for(int i=x;i;i-=(i&-i)) Ans+=T[i]; return Ans; }
void CDQ(int now,int L,int R)
{
	if(L==R) return;
	int Mid=(L+R)>>1; data *S=D[now+1],*F=D[now];
	int s=0;
	if(now==0)
	{
		for(int i=L;i<=Mid;i++) S[++s]=F[i],S[s].p=0;
		for(int i=Mid+1;i<=R;i++) S[++s]=F[i],S[s].p=1;
	} else
	{
		for(int i=L;i<=Mid;i++) if(!F[i].p) S[++s]=F[i];
		for(int i=Mid+1;i<=R;i++) if(F[i].p) S[++s]=F[i];
	}
	if(s)
	{
		px=now+1; sort(S+1,S+1+s,cmp);
		if(now==2)
		{
			for(int i=1;i<=s;i++)
			if(!S[i].p) add(S[i].d,1); else ans+=sum(S[i].d);
			for(int i=1;i<=s;i++)
			if(!S[i].p) add(S[i].d,-1);
		} else CDQ(now+1,1,s);
	}
	CDQ(now,L,Mid); CDQ(now,Mid+1,R);
}
int main()
{
	freopen("partial_order_two.in","r",stdin);
	freopen("partial_order_two.out","w",stdout);
	scanf("%d",&n); data *F=D[0];
	for(int i=1;i<=n;i++) F[i].id=i;
	for(int i=1;i<=n;i++) scanf("%d",&F[i].a);
	for(int i=1;i<=n;i++) scanf("%d",&F[i].b);
	for(int i=1;i<=n;i++) scanf("%d",&F[i].c);
	for(int i=1;i<=n;i++) scanf("%d",&F[i].d);
	ans=0; CDQ(0,1,n);
	printf("%d\n",ans);
	return 0;
}
COGS 2580. [HZOI 2015]偏序 II的更多相关文章
- Bitset([HZOI 2015]偏序++)
		Bitset简介 下面介绍C++ STL 中一个非常有用的东西: Bitset 类似于二进制状压,它可以把信息转化成一个01串存储起来 定义方法: 首先要#include<bitset>或 ... 
- cogs 2123. [HZOI 2015] Glass Beads
		2123. [HZOI 2015] Glass Beads ★★★ 输入文件:MinRepresentations.in 输出文件:MinRepresentations.out 简单对比时 ... 
- cogs 2320. [HZOI 2015]聪聪的世界题解
		2320. [HZOI 2015]聪聪的世界 时间限制:6 s 内存限制:512 MB [题目描述] 背景: 聪聪的性取向有问题. 题目描述: 聪聪遇到了一个难题: 给出一个序列a1…an,完成以 ... 
- cogs 2355. [HZOI 2015] 有标号的DAG计数 II
		题目分析 来自2013年王迪的论文<浅谈容斥原理> 设\(f_{n,S}\)表示n个节点,入度为0的点集恰好为S的方案数. 设\(g_{n,S}\)表示n个节点,入度为0的点集至少为S的方 ... 
- COGS 2479. [HZOI 2016]偏序 [CDQ分治套CDQ分治 四维偏序]
		传送门 给定一个有n个元素的序列,元素编号为1~n,每个元素有三个属性a,b,c,求序列中满足i<j且ai<aj且bi<bj且ci<cj的数对(i,j)的个数. 对于100%的 ... 
- COGS 2479. [HZOI 2016] 偏序 (CDQ套CDQ)
		传送门 解题思路 四维偏序问题,模仿三维偏序,第一维排序,第二维CDQ,最后剩下二元组,发现没办法处理,就继续嵌套CDQ分治.首先把二元组的左右两边分别打上不同的标记,因为统计答案时只统计左边对右边的 ... 
- COGS 2188. [HZOI 2015] Math 题解
		题目描述: 给定n个数X1-Xn,求下面式子的值(整数部分): n<=107,xi<=109且互不相同. 分析: 其实一开始看见这道题我也吓傻了,k这么大,再说我又是数论鶸渣,打死也不 ... 
- [COGS 2287][HZOI 2015]疯狂的机器人
		Description 题库链接 现在在二维平面内原点上有一只机器人,他每次可以选择向右走,向左走,向下走,向上走和不走(每次如果走只能走一格).机器人不能走到横坐标是负数或者纵坐标是负数的点上. 给 ... 
- [COGS 2258][HZOI 2015]复仇的序幕曲
		Description 你还梦不梦痛不痛,回忆这么重你怎么背得动 ----序言 当年的战火硝烟已经渐渐远去,可仇恨却在阿凯蒂王子的心中越来越深 他的叔父三年前谋权篡位,逼宫杀死了他的父王,用铁血手腕平 ... 
随机推荐
- NOIP 2013 T2 火柴排队 ---->求逆序对
			[NOIP2013T2]火柴排队 背景 noip2013day1 描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各 自 排成一列, 同一列火柴的高度互不相同, ... 
- 9.14[XJOI] NOIP训练33
			今日9.14 洛谷打卡:大凶!!!(换个字体玩玩qwq) -------------------------------------------------------- 一个超颓的上午 今天又是fl ... 
- 如何在C#中运行数学表达式字符串
			方法1:利用DataTable中的Compute方法 1 string expression = "1+2*3"; 2 DataTable eval = new DataTable ... 
- Android 低功耗蓝牙的多设备连接与数据接收,简单实现
			在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packe ... 
- jquery自动完成插件的使用
			.ui-autocomplete { z-index: !important; max-height: 100px; overflow-y: auto; /* 防止水平滚动条 */ overflow- ... 
- Arguments Optional FreeCodeCamp
			function add() { if(typeof arguments[0] !== "number" || (arguments.length > 1 && ... 
- vue自己写了一个div菜单,点击按钮展开,点击其他地方关闭这个div菜单
			需求是通过点击body页面,在其他地方就关闭这个<div>菜单,给这个div一个id:problemList,但是点击我打开的按钮,不关闭. created () { document.o ... 
- css定位!如何将两个表格并排排列!
			直接创建两个div,之后设置每个占页面的一般,设置左对齐即可.<div style="width:50%;hight:100%;float:left:"><for ... 
- 【JavaScript框架封装】实现一个类似于JQuery的基础框架、事件框架、CSS框架、属性框架、内容框架、动画框架整体架构的搭建
			/* * @Author: 我爱科技论坛 * @Time: 20180715 * @Desc: 实现一个类似于JQuery功能的框架 * V 1.0: 实现了基础框架.事件框架.CSS框架.属性框架. ... 
- 使用ant design pro搭建项目
			脚手架搭建 git clone --depth=1 https://github.com/ant-design/ant-design-pro.git my-project 然后 cd my-proje ... 
