题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3262

题目大意:中文题目

具体思路:CDQ可以处理的问题,一共有三维空间,对于第一维我们直接按照从小到大排序就可以了,然后就开始处理第二维,第二维的话我们通过cdq来维护,然后第三维通过树状数组维护就可以了。

刚开始做CDQ的问题,个人觉得CDQ处理的就是把一整个大的问题转换成多个子问题进行求解,然后很重要的一个的地方就是解决前面一个子问题对后面的问题的影响。

AC代码:

 #include<iostream>
#include<stack>
#include<stdio.h>
#include<cmath>
#include<algorithm>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 2e5+;
struct node{
int x,y,z;
int ans,cnt;
}q[maxn];
int maxstate;
bool cmp1(node t1,node t2){
if(t1.x!=t2.x)return t1.x<t2.x;
if(t1.y!=t2.y)return t1.y<t2.y;
return t1.z<t2.z;
}
bool cmp2(node t1,node t2){
if(t1.y!=t2.y)return t1.y<t2.y;
return t1.z<t2.z;
}//注意两个cmp的不同,对于第一个cmp我们只是初始的状态,但是对于第二个cmp,我们处理的是x已经排好的前提下了,如果这个时候再对q进行排序的话,会打乱y的正常顺序。
int vis[maxn],tree[maxn<<];
int lowbit(int x){return x&(-x);}
void update(int x,int val){
while(x<=maxstate){
tree[x]+=val;
x+=lowbit(x);
}
}
int ask(int x){
int ans=;
while(x){
ans+=tree[x];
x-=lowbit(x);
}
return ans;
}
void cdq(int l,int r){
if(l==r){
q[l].ans+=q[l].cnt-;
return ;
}
int mid=(l+r)>>;
cdq(l,mid);
cdq(mid+,r);
sort(q+l,q+mid+,cmp2);
sort(q+mid+,q+r+,cmp2);
int tmp=l;
for(int i=mid+;i<=r;i++){
while(tmp<=mid&&q[i].y>=q[tmp].y){
update(q[tmp].z,q[tmp].cnt),tmp++;
}
q[i].ans+=ask(q[i].z);
}
for(int i=l;i<tmp;i++){
update(q[i].z,-q[i].cnt);
}//消除前面一个子问题对后面的子问题的影响
}
int main(){
//freopen("hqx.in","r",stdin);
int n;
scanf("%d %d",&n,&maxstate);
for(int i=;i<=n;i++){
scanf("%d %d %d",&q[i].x,&q[i].y,&q[i].z);
q[i].cnt=;
q[i].ans=;
}
int tot=;
sort(q+,q+n+,cmp1);
for(int i=;i<=n;i++){
if(i!=&&q[i].x==q[tot].x&&q[i].y==q[tot].y&&q[i].z==q[tot].z)q[tot].cnt++;
else q[++tot]=q[i];
}
cdq(,tot);
for(int i=;i<=tot;i++){
vis[q[i].ans]+=q[i].cnt;
}
for(int i=;i<n;i++){
printf("%d\n",vis[i]);
}
return ;
}

bzoj3262: 陌上花开(CDQ+树状数组处理三维偏序问题)的更多相关文章

  1. bzoj3262 陌上花开 cdq+树状数组

    [bzoj3262]陌上花开 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义 ...

  2. HDU 5618:Jam's problem again(CDQ分治+树状数组处理三维偏序)

    http://acm.hdu.edu.cn/showproblem.php?pid=5618 题意:…… 思路:和NEUOJ那题一样的.重新写了遍理解了一下,算作处理三维偏序的模板了. #includ ...

  3. bzoj3295 [Cqoi2011]动态逆序对 cdq+树状数组

    [bzoj3295][Cqoi2011]动态逆序对 2014年6月17日4,7954 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. ...

  4. bzoj3262陌上花开 三维数点 cdq+树状数组

    大早上的做了一道三维数点一道五位数点,神清气爽! 先给一维排序,变成一个奇怪的动态的二维数点(相当于有一个扫描面扫过去,导致一系列的加点和询问) 然后cdq分治,再变回静态,考虑前半段对后半段的影响 ...

  5. BZOJ 3262 陌上花开 (三维偏序CDQ+树状数组)

    题目大意: 题面传送门 三维偏序裸题 首先,把三元组关于$a_{i}$排序 然后开始$CDQ$分治,回溯后按$b_{i}$排序 现在要处理左侧对右侧的影响了,显然现在左侧三元组的$a_{i}$都小于等 ...

  6. BZOJ 2716/2648 SJY摆棋子 (三维偏序CDQ+树状数组)

    题目大意: 洛谷传送门 这明明是一道KD-Tree,CDQ分治是TLE的做法 化简式子,$|x1-x2|-|y1-y2|=(x1+y1)-(x2+y2)$ 而$CDQ$分治只能解决$x1 \leq x ...

  7. BZOJ 1176/2683 Mokia (三维偏序CDQ+树状数组)

    题目大意: 洛谷传送门 三维偏序裸题.. 每次操作都看成一个三元组$<x,y,t>$,表示$x,y$坐标和操作时间$t $ 询问操作拆成$4$个容斥 接下来就是$CDQ$了,外层按t排序, ...

  8. BZOJ 2141 排队 (三维偏序CDQ+树状数组)

    题目大意:略 洛谷传送门 和 [CQOI2015]动态逆序对 这道题一样的思路 一开始的序列视为$n$次插入操作 把每次交换操作看成四次操作,删除$x$,删除$y$,加入$x$,加入$y$ 把每次操作 ...

  9. BZOJ 3295 [CQOI2011]动态逆序对 (三维偏序CDQ+树状数组)

    题目大意: 题面传送门 还是一道三维偏序题 每次操作都可以看成这样一个三元组 $<x,w,t>$ ,操作的位置,权值,修改时间 一开始的序列看成n次插入操作 我们先求出不删除时的逆序对总数 ...

随机推荐

  1. 【译】2. Java反射——Class对象

    原文地址:http://tutorials.jenkov.com/java-reflection/classes.html ====================================== ...

  2. JDK几个高版本的新特性

    JDK 高版本的新特性 1.JDK5的新特性: 自动拆装箱 见Integer部分笔记 泛型 增强for循环 静态导入 可变参数 见集合部分笔记 枚举 是指将变量的值一一列出来,变量的值只限于列举出来的 ...

  3. Luogu P3868 [TJOI2009]猜数字

    题目链接 \(Click\) \(Here\) 中国剩余定理的板子.小心取模. #include <bits/stdc++.h> using namespace std; const in ...

  4. C++(3):./Encryptor: undefined symbol:Z11startserviceLAKJDFLJALDKJFLLLLL

    在Linux下编译得Encryptor文件,但是执行./Encryptor时 报了如上错误:undefined symbol:Z11startserviceLAKJDFLJALDKJFLLLLL 原因 ...

  5. 2017-12-15python全栈9期第二天第六节之三次登陆机会升级版再试试

    #!/user/bin/python# -*- coding:utf-8 -*-#当剩余为0次机会时.询问用户是否再试试.如果同意那就再给三次机会.可一直继续username = 'zd'passwo ...

  6. 剑指Offer_编程题_16

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. /* struct ListNode { int val; struct ListNode *n ...

  7. HTTP深入理解

    HTTP被设计于二十世纪九十年代初期,是一种可扩展的协议, 它是应用层的协议, 通过TCP,或TLS加密的TCP连接来发送, 理论上任何可靠的传输协议都可以使用. 因其良好的扩展性,时至今日,它不仅被 ...

  8. vue离开页面销毁定时器

    beforeDestroy() { if(this.timer) { clearInterval(this.timer); //关闭 }  //利用vue的生命周期函数 vue 是单页面应用,路由切换 ...

  9. Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据

    KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...

  10. 使用C#的HttpWebRequest模拟登陆网站

    很久没有写新的东西了,今天在工作中遇到的一个问题,感觉很有用,有种想记下来的冲动. 这篇文章是有关模拟登录网站方面的. 实现步骤: 启用一个web会话 发送模拟数据请求(POST或者GET) 获取会话 ...