裸的cdq,注意去重;

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=,maxm=;
int tot,n,k,tr[maxm],h[maxn],t1,t2,len1,len2,ans[maxn];
void add(int pos,int v){
for(int i=pos;i<maxm;i+=i&(-i))
tr[i]+=v;
}
int qs(int pos){
int res=;
for(int i=pos;i;i-=i&(-i))
res+=tr[i];
return res;
}
struct node{
int ls,lc,lm,id,cnt;
}tt[maxn],t[maxn],tmp1[maxn],tmp2[maxn];
int cmp1(node a,node b){
if(a.lm!=b.lm)return a.lm<b.lm;
if(a.lc!=b.lc)return a.lc<b.lc;
return a.ls<b.ls;
}
int cmp2(node a,node b){
if(a.lc!=b.lc)return a.lc<b.lc;
return a.ls<b.ls;
}
void cdq(int l,int r){
if(l==r){
h[t[l].id]+=t[l].cnt-;
return;
}
int mid=l+r>>;
cdq(l,mid);cdq(mid+,r);
t1=t2=;
for(int i=l;i<=mid;++i)tmp1[++t1]=t[i];
for(int i=mid+;i<=r;++i)tmp2[++t2]=t[i];
sort(tmp1+,tmp1+t1+,cmp2);
sort(tmp2+,tmp2+t2+,cmp2);
len1=t1,len2=t2;
t1=t2=;
for(t2=;t2<=len2;++t2){
while(tmp1[t1].lc<=tmp2[t2].lc&&t1<=len1){
add(tmp1[t1].ls,tmp1[t1].cnt);++t1;
}
h[tmp2[t2].id]+=qs(tmp2[t2].ls);
}
for(int i=;i<t1;++i)add(tmp1[i].ls,-tmp1[i].cnt);
}
int main(){
cin>>n>>k;
for(int i=;i<=n;++i){
scanf("%d%d%d",&tt[i].ls,&tt[i].lc,&tt[i].lm);
}
sort(tt+,tt+n+,cmp1);
for(int i=;i<=n;++i){
if(i!=&&tt[i-].lm==tt[i].lm&&tt[i-].ls==tt[i].ls&&tt[i-].lc==tt[i].lc){
t[tot].cnt++;
}
else t[++tot]=tt[i],t[tot].cnt=;
}
for(int i=;i<=tot;++i)t[i].id=i;
cdq(,tot);
for(int i=;i<=tot;++i){
ans[h[i]]+=t[i].cnt;
}
for(int i=;i<n;++i){
printf("%d\n",ans[i]);
}
system("pause");
return ;
}

bzoj3262(cdq分治模板)的更多相关文章

  1. 洛谷 P3810 【模板】三维偏序(陌上花开) (cdq分治模板)

    在solve(L,R)中,需要先分治solve两个子区间,再计算左边区间修改对右边区间询问的贡献. 注意,计算额外的贡献时,两子区间各自内部的顺序变得不再重要(不管怎么样左边区间的都发生在右边之前), ...

  2. CDQ分治模板

    #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #defi ...

  3. [BOI2007]Mokia 摩基亚(CDQ分治)

    upd:\((x1,y1)(x2,y2)\)表示以\((x1,y1)\)为左上端点 \((x2,y2)\)为右下端点的矩形 本来以为是一道二位树状数组的模板,但是看数据范围之后就放弃了,边界既然到了2 ...

  4. P3157 [CQOI2011]动态逆序对 CDQ分治

    一道CDQ分治模板题简单来说,这道题是三维数点对于离线的二维数点,我们再熟悉不过:利用坐标的单调递增性,先按更坐标排序,再按纵坐标排序更新和查询时都直接调用纵坐标.实际上,我们是通过排序将二维中的一维 ...

  5. 洛谷P3810 陌上花开(CDQ分治)

    洛谷P3810 陌上花开 传送门 题解: CDQ分治模板题. 一维排序,二维归并,三维树状数组. 核心思想是分治,即计算左边区间对右边区间的影响. 代码如下: #include <bits/st ...

  6. Educational Codeforces Round 41 967 E. Tufurama (CDQ分治 求 二维点数)

    Educational Codeforces Round 41 (Rated for Div. 2) E. Tufurama (CDQ分治 求 二维点数) time limit per test 2 ...

  7. P3810 陌上花开 CDQ分治

    陌上花开 CDQ分治 传送门:https://www.luogu.org/problemnew/show/P3810 题意: \[ 有n 个元素,第 i 个元素有 a_i. b_i. c_i 三个属性 ...

  8. [模板] CDQ分治&&BZOJ3262:陌上花开

    简介 CDQ分治是分治的一种, 可以看做归并排序的扩展, 利用离线将一些 \(O(n)\) 的暴力优化到 \(O(log n)\). 它可以用来顶替一些高级(log)数据结构等. 一般地, CDQ分治 ...

  9. 【BZOJ3262】陌上花开(CDQ分治)

    [BZOJ3262]陌上花开(CDQ分治) 题解 原来放过这道题目,题面在这里 树套树的做法也请点上面 这回用CDQ分治做的 其实也很简单, 对于第一维排序之后 显然只有前面的对后面的才会产生贡献 那 ...

随机推荐

  1. [z]根据awr报告查看最慢的sql语句

    http://blog.itpub.net/12679300/viewspace-2125679/ 当系统运行了一段时间后,系统基本也趋于稳定了,SQL调优也变了DBA的一个主要的工作内容,很多时候都 ...

  2. windows2003两台服务器,局域网之间不能互相访问

    准备在两台服务器之间,映射网络驱动器,但怎么也连不上了. 可以在网络邻居中看到对方的机器,但就是访问不到共享的文件,也无法做网络映射. 搜索了一下,发现在是因为防火墙中,没有把"文件和打印机 ...

  3. Python爬虫的原理

    简单来说互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML.JS.CSS代码返回给浏览器,这些代码经过浏览器解析.渲染,将丰富多彩的网页呈现我们眼前: 一.爬虫是什么? ...

  4. Netty 源码 Channel(二)核心类

    Netty 源码 Channel(二)核心类 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一.Channel 类图 二. ...

  5. python flask 项目结构

    1. 今天学习遇到一个问题,以前项目比较简单,所有的@app.route 都是写在一个文件app.py 中的,然后启动也是在这个文件中启动app.run .但是我今天 想写一个新的模块, 于是我新启了 ...

  6. Scrapy框架爬虫

    一.sprapy爬虫框架 pip install pypiwin32 1) 创建爬虫框架 scrapy startproject Project # 创建爬虫项目 You can start your ...

  7. 别人的Linux私房菜(1)计算机概论

    计算机主板 早期两个网桥控制通信,北桥连接速度比较快的CPU.内存.显卡.南桥连接较慢的接口,如硬盘,USB,网卡等.北桥的控制器集成到了CPU中. CPU工作频率 外频:CPU与外部组件进行数据传输 ...

  8. mysql之索引查询2

    一 索引的创建 索引减慢了 写的操作,优化了读取的时间 index:普通索引,加速了查找的时间. fulltext:全文索引,可以选用占用空间非常大的文本信息的字段作为索引的字段.使用fulltext ...

  9. 【转】PHP实现验证码

    转自http://www.jb51.net/article/40341.htm 新建一个captcha.php: //验证码类class Captcha { private $charset = 'a ...

  10. Jetty 9的使用

    参考来源:https://www.cnblogs.com/empireghost/p/3522834.html