三维偏序 cdq
就是将逆序对转化到了三维上去
原理等我寒假再补
第一维sort解决
第二维并归排序(cdq)解决
第三维树状数组
// luogu-judger-enable-o2
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using std::sort;
const int maxn=101000;
const int Max=201000;
struct node
{
int a,b,c;
int size,ans;
bool operator <= (const node &A)
{
if(b!=A.b) return b<=A.b;
if(c!=A.c) return c<=A.c;
return c<=A.c;
}
};
node Q[maxn],tmp[maxn];
int base[Max],t[Max],len,Tim;
int TOT[Max<<1];
int n,m;
void add(int pos,int val,int T)
{
while(pos<=len)
{
if(t[pos]!=T)
{
t[pos]=T;
base[pos]=0;
}
base[pos]+=val;
pos+=(pos&(-pos));
}
return ;
}
int sum(int pos,int T)
{
int res=0;
while(pos)
{
if(t[pos]!=T)
{
t[pos]=T;
base[pos]=0;
}
res+=base[pos];
pos-=(pos&(-pos));
}
return res;
}
bool compare(const node &a,const node &b)
{
if(a.a!=b.a) return a.a<b.a;
if(a.b!=b.b) return a.b<b.b;
return a.c<b.c;
}
void cdq(int l,int r)
{
if(l==r) return ;
int mid=(l+r)>>1,o=0,T=++Tim;
cdq(l,mid);cdq(mid+1,r);
int q=l,p=mid+1;
while(q<=mid&&p<=r)
{
if(Q[q]<=Q[p])//按照第二维顺序,左区间的元素算贡献(利用bit),右区间的元素进行第三维元素的顺序对查询
{
add(Q[q].c,Q[q].size,T);//利用时间戳
tmp[o++]=Q[q++];//回收元素
}
else
{
Q[p].ans+=sum(Q[p].c,T);
tmp[o++]=Q[p++];
}
}
while(q<=mid) tmp[o++]=Q[q++];//将没有处理的元素压回tmp
while(p<=r)
{
Q[p].ans+=sum(Q[p].c,T);
tmp[o++]=Q[p++];
}
for(int i=0;i<o;i++) Q[l+i]=tmp[i];//回填
return ;
}
int main()
{
scanf("%d%d",&n,&m);
len=m;
for(int i=1;i<=n;i++)
scanf("%d%d%d",&tmp[i].a,&tmp[i].b,&tmp[i].c);
sort(tmp+1,tmp+1+n,compare);//解决第一位顺序
int T=0;
for(int i=1,pas=1;i<=n;i++)//去重,cdq无法正确处理相同原元素
{
if(tmp[i].a!=tmp[i+1].a||tmp[i].b!=tmp[i+1].b||tmp[i].c!=tmp[i+1].c)
{
Q[++T]=tmp[i];
Q[T].size=pas;Q[T].ans=0;
pas=1;
}
else pas++;
}
cdq(1,T);
for(int i=1;i<=T;i++) TOT[Q[i].ans+Q[i].size-1]+=Q[i].size;
for(int i=0;i<n;i++) printf("%d\n",TOT[i]);
}
三维偏序 cdq的更多相关文章
- Luogu 3810 & BZOJ 3262 陌上花开/三维偏序 | CDQ分治
Luogu 3810 & BZOJ 3263 陌上花开/三维偏序 | CDQ分治 题面 \(n\)个元素,每个元素有三个值:\(a_i\), \(b_i\) 和 \(c_i\).定义一个元素的 ...
- 洛谷P3810-陌上开花(三维偏序, CDQ, 树状数组)
链接: https://www.luogu.org/problem/P3810#submit 题意: 一个元素三个属性, x, y, z, 给定求f(b) = {ax <= bx, ay < ...
- bzoj3262: 陌上花开 三维偏序cdq分治
三维偏序裸题,cdq分治时,左侧的x一定比右侧x小,然后分别按y排序,对于左侧元素按y大小把z依次插入到树状数组里,其中维护每个左侧元素对右侧元素的贡献,在bit查询即可 /************* ...
- [bzoj] 3263 陌上花开 洛谷 P3810 三维偏序|| CDQ分治 && CDQ分治讲解
原题 定义一个点比另一个点大为当且仅当这个点的三个值分别大于等于另一个点的三个值.每比一个点大就为加一等级,求每个等级的点的数量. 显然的三维偏序问题,CDQ的板子题. CDQ分治: CDQ分治是一种 ...
- BZOJ3262 陌上花开 —— 三维偏序 CDQ分治
题目链接:https://vjudge.net/problem/HYSBZ-3262 3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MBSubmit ...
- BZOJ 2716/2648 SJY摆棋子 (三维偏序CDQ+树状数组)
题目大意: 洛谷传送门 这明明是一道KD-Tree,CDQ分治是TLE的做法 化简式子,$|x1-x2|-|y1-y2|=(x1+y1)-(x2+y2)$ 而$CDQ$分治只能解决$x1 \leq x ...
- BZOJ 1176/2683 Mokia (三维偏序CDQ+树状数组)
题目大意: 洛谷传送门 三维偏序裸题.. 每次操作都看成一个三元组$<x,y,t>$,表示$x,y$坐标和操作时间$t $ 询问操作拆成$4$个容斥 接下来就是$CDQ$了,外层按t排序, ...
- BZOJ 2244 [SDOI2011]拦截导弹 (三维偏序CDQ+线段树)
题目大意: 洛谷传送门 不愧为SDOI的duliu题 第一问?二元组的最长不上升子序列长度?裸的三维偏序问题,直接上$CDQ$ 由于是不上升,需要查询某一范围的最大值,并不是前缀最大值,建议用线段树实 ...
- BZOJ 2141 排队 (三维偏序CDQ+树状数组)
题目大意:略 洛谷传送门 和 [CQOI2015]动态逆序对 这道题一样的思路 一开始的序列视为$n$次插入操作 把每次交换操作看成四次操作,删除$x$,删除$y$,加入$x$,加入$y$ 把每次操作 ...
- BZOJ 3295 [CQOI2011]动态逆序对 (三维偏序CDQ+树状数组)
题目大意: 题面传送门 还是一道三维偏序题 每次操作都可以看成这样一个三元组 $<x,w,t>$ ,操作的位置,权值,修改时间 一开始的序列看成n次插入操作 我们先求出不删除时的逆序对总数 ...
随机推荐
- C#学习笔记-继承基本知识
namespace Inheritance { class Program { static void Main(string[] args) { Dog dog = new Dog(); dog.A ...
- thinkphp I() 方法
I() 方法用于获取前台提交的表单的value值. <form id="complai_form" method="post" action=" ...
- LinkedList实现队列存储结构
package com.tercher.demo; import java.util.LinkedList; public class Queue { //用LinkedList 实现队列的数据存储结 ...
- PoPo数据可视化周刊第5期
PoPo数据可视化 聚焦于Web数据可视化与可视化交互领域,发现可视化领域有意思的内容.不想错过可视化领域的精彩内容, 就快快关注我们吧 :) World Wire 数据可视化演示(视频) IBM公司 ...
- MySQL5.5登陆
通过cmd登陆 mysql -h localhost -P 3306 -u root -p123456 h后面跟的是域名或IP地址:大写的P后面跟的是端口号:u后面跟的是用户名:小写的p后面跟的是密码 ...
- 基于 Web 的 Go 语言 IDE - Wide 1.5.1 发布!
Wide 是一个基于 Web 的 Go 语言 IDE, 其目标不是彻底代替本地 IDE,而是做本地 IDE 很难做到的事情: 分享代码:类似 playground,但支持多文件并提供嵌入方式,在其他网 ...
- Eclipse调试不能进入断点
Eclipse下在给行设置断点或者在调试时弹出错误“Unable to install breakpoint due to missing line number attributes,Modify ...
- 外贸电商的ERP有很多
经常有人问我:市面上针对外贸电商的ERP有很多,为什么有的卖家用得风生水起,而我却觉得每款都不合适?一般我都是拒绝回答的,一是因为这种情况大多数跟ERP实施有关,很难用短短几千字就说清楚:二是因为我也 ...
- GOOGLE高级搜索技巧
前记: 我是完整的看完了.内容有点乱啊,自己没有时间整理,先放在自己的印象笔记里了.... 二,GOOGLE特色 GOOGLE支持多达132种语言,包括简体中文和繁体中文: GOOGLE网站只提 ...
- JavaScript停止事件冒泡和取消事件默认行为
功能:停止事件冒泡 function stopBubble(e) { // 如果提供了事件对象,则这是一个非IE浏览器 if ( e && e.stopPropagation ) { ...