注意判断 三个条件都一样的……

(CDQ分治 其实并不是很难理解 只是想不到……)

CDQ分治:

//By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 888888
int n,k,tree[N],tot,ans[N];
struct Node{int a,b,c,ans,sum;}node[N];
bool cmp(Node a,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;}
bool cmp2(Node a,Node b){return a.b<b.b;}
void insert(int l,int r,int pos,int num,int wei){
if(l==r){tree[pos]+=wei;return;}
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
if(mid>=num)insert(l,mid,lson,num,wei);
else insert(mid+1,r,rson,num,wei);
tree[pos]=tree[lson]+tree[rson];
}
int query(int l,int r,int pos,int num){
if(r<=num)return tree[pos];
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
if(mid>=num)return query(l,mid,lson,num);
else return query(l,mid,lson,num)+query(mid+1,r,rson,num);
}
void cdq(int l,int r){
if(l==r)return;
int mid=(l+r)>>1,jy=l;
cdq(l,mid),cdq(mid+1,r);
sort(node+l,node+mid+1,cmp2),sort(node+mid+1,node+r+1,cmp2);
for(int i=mid+1;i<=r;i++){
while(jy<=mid&&node[jy].b<=node[i].b)insert(1,k,1,node[jy].c,node[jy].sum),jy++;
node[i].ans+=query(1,k,1,node[i].c);
}
while(jy-->l)insert(1,k,1,node[jy].c,-node[jy].sum);
}
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;node[i].sum=1,i++)scanf("%d%d%d",&node[i].a,&node[i].b,&node[i].c);
sort(node+1,node+1+n,cmp);
for(int i=1;i<=n;i++)
if(node[i].a!=node[tot].a||node[i].b!=node[tot].b||node[i].c!=node[tot].c)node[++tot]=node[i];
else node[tot].sum++;
cdq(1,tot);
for(int i=1;i<=tot;i++)ans[node[i].ans+node[i].sum-1]+=node[i].sum;
for(int i=0;i<n;i++)printf("%d\n",ans[i]);
}

树套树 (线段树+treap):

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 6005000
int n,k,root[N],size,t,ans,rec,Ans[1000500];
struct Node{int s,c,m;}node[1000500];
struct Tree{int ch[2],v,cnt,rnd,sz;}tr[N];
bool cmp(Node a,Node b){if(a.s!=b.s)return a.s<b.s;if(a.c!=b.c)return a.c<b.c;return a.m<b.m;}
void Upd(int k){tr[k].sz=tr[k].cnt+tr[tr[k].ch[0]].sz+tr[tr[k].ch[1]].sz;}
void rot(int &k,bool f){int t=tr[k].ch[f];tr[k].ch[f]=tr[t].ch[!f],tr[t].ch[!f]=k,Upd(k),Upd(t),k=t;}
void ins(int &k,int num){
if(!k){k=++size;tr[k].cnt=tr[k].sz=1,tr[k].rnd=rand(),tr[k].v=num;return;}
tr[k].sz++;
if(tr[k].v==num){tr[k].cnt++;return;}
bool f=num>tr[k].v;ins(tr[k].ch[f],num);
if(tr[k].rnd>tr[tr[k].ch[f]].rnd)rot(k,f);
}
void ask(int &k,int num){
if(!k)return;
if(tr[k].v==num){ans+=tr[k].cnt+tr[tr[k].ch[0]].sz; return;}
else if(tr[k].v>num)ask(tr[k].ch[0],num);
else ans+=tr[k].cnt+tr[tr[k].ch[0]].sz,ask(tr[k].ch[1],num);
}
void Insert(int l,int r,int pos){
ins(root[pos],node[t].m);
if(l==r)return;
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
if(mid<node[t].c)Insert(mid+1,r,rson);
else Insert(l,mid,lson);
}
void Query(int l,int r,int pos){
if(r<=node[t].c){ask(root[pos],node[t].m);return;}
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
if(mid>=node[t].c)Query(l,mid,lson);
else Query(l,mid,lson),Query(mid+1,r,rson);
}
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d%d%d",&node[i].s,&node[i].c,&node[i].m);
sort(node+1,node+1+n,cmp);
for(t=1;t<=n;t++){
if(node[t].c!=node[t+1].c||node[t].m!=node[t+1].m||node[t].s!=node[t+1].s)
ans=0,Query(1,k,1),Ans[ans]+=rec+1,Insert(1,k,1),rec=0;
else rec++,Insert(1,k,1);
}
for(int i=0;i<n;i++)printf("%d\n",Ans[i]);
}

BZOJ 3262 cdq分治 OR 树套树的更多相关文章

  1. 【Bzoj 3295】 动态逆序对(树套树|CDQ分治)

    [题意] 每次删除一个数,然后问删除前逆序对数. [分析] 没有AC不开心.. 我的树状数组套字母树,应该是爆空间的,空间复杂度O(nlogn^2)啊..哭.. 然后就没有然后了,别人家的树套树是树状 ...

  2. bzoj 3295: [Cqoi2011]动态逆序对(树套树 or CDQ分治)

    Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...

  3. BZOJ4170 极光(CDQ分治 或 树套树)

    传送门 BZOJ上的题目没有题面-- [样例输入] 3 5 2 4 3 Query 2 2 Modify 1 3 Query 2 2 Modify 1 2 Query 1 1 [样例输出] 2 3 3 ...

  4. bzoj3110: [Zjoi2013]K大数查询 【cdq分治&树套树】

    模板题,折腾了许久. cqd分治整体二分,感觉像是把询问分到答案上. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = ...

  5. [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...

  6. Codechef-ANCESTOR(树套树/CDQ分治)

    题意: 给定两棵有根树,各有 N 个点.两棵树上的点分别被从 1 到 N 标号.两棵树的根均为标号为 1 的节点. 你的任务非常简单:对于每个 i,找到一个 j(j != i),使得在两棵树中 j 都 ...

  7. 2019南昌网络赛-I. Yukino With Subinterval 线段树套树状数组,CDQ分治

    TMD...这题卡内存卡的真优秀... 所以以后还是别用主席树的写法...不然怎么死的都不知道... 树套树中,主席树方法开权值线段树...会造成空间的浪费...这道题内存卡的很紧... 由于树套树已 ...

  8. [Bzoj3262]陌上花开(CDQ分治&&树状数组||树套树)

    题目链接 题目就是赤裸裸的三维偏序,所以用CDQ+树状数组可以比较轻松的解决,但是还是树套树好想QAQ CDQ+树状数组 #include<bits/stdc++.h> using nam ...

  9. 【APIO2019】路灯(ODT & (树套树 | CDQ分治))

    Description 一条 \(n\) 条边,\(n+1\) 个点的链,边有黑有白.若结点 \(a\) 可以到达 \(b\),需要满足 \(a\to b\) 的路径上的边不能有黑的.现给出 \(0\ ...

随机推荐

  1. 11g Oracle Rac安装(基于linux6)可能出现的问题

    11g Oracle Rac安装(基于linux6)可能出现的问题汇总: 7)使用"yum"命令执行节点的自动配置失败. 修改一下 /etc/resolv.conf,添加: nam ...

  2. 【codeforces 67A】Partial Teacher

    [题目链接]:http://codeforces.com/problemset/problem/67/A [题意] 给一个长度为n-1的字符串; 每个字符串是'L','R','='这3种字符中的一个; ...

  3. nested exception is java.lang.NoClassDefFoundError: org/codehaus/jettison/json/JSONObject异常的解决办法

    解决办法:你可以尝试添加一个jar包,因为我加入了一个jar包后错误问题成功解决. 将所需要的jettison-1.2.jar包复制到lib文件夹里面,重启项目,问题搞定.

  4. Cannot set web app root system property when WAR file is not expanded

    Cannot set web app root system property when WAR file is not expanded 在tomcat下面可以,在weblogic下面不行的处理方法 ...

  5. POJ 3368 Frequent values(RMQ 求区间出现最多次数的数字的次数)

    题目链接:http://poj.org/problem? id=3368 Description You are given a sequence of n integers a1 , a2 , .. ...

  6. 【android】解决Viewpager设置高度为wrap_content无效的方法

    今天发现设置viewpager高度为wrap_content时并没作用.stackoverflow给出了解决方式,就是自己定义viewpager,重写onMesure()方法: public clas ...

  7. thinkphp5.0的验证码安装和相关错误

    thinkphp5.0的验证码安装和相关错误 问题 只要是之前使用thinkphp5框架搭建网站的时候发现不管如何调用验证码都无法使用,按照官网要求,使用composer安装验证码出现报错Fatal ...

  8. flatMap作用

    总结:1. map会将每一条输入映射为一个新对象.{苹果,梨子}.map(去皮) = {去皮苹果,去皮梨子} 其中: “去皮”函数的类型为:A => B 2.flatMap包含两个操作:会将每一 ...

  9. C&C控制服务的设计和侦测方法综述——DDoS攻击,上传从宿主机偷窃的到的信息,定时给感染机文件加密勒索等。

    这篇文章总结了一些我在安全工作里见到过的千奇百怪的C&C控制服务器的设计方法以及对应的侦测方法,在每个C&C控制服务先介绍黑帽部分即针对不同目的的C&C服务器设计方法,再介绍白 ...

  10. FZOJ--2221-- RunningMan(水题)

    Problem 2221 RunningMan Accept: 4    Submit: 10 Time Limit: 1000 mSec    Memory Limit : 32768 KB Pro ...