/*

【bzoj3262】陌上花开

2014年6月19日1,2430

Description

有n朵花,每朵花有三个属性:花形(s)、颜色(c)、气味(m),又三个整数表示。现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量。定义一朵花A比另一朵花B要美丽,当且仅当Sa>=Sb,Ca>=Cb,Ma>=Mb。显然,两朵花可能有同样的属性。需要统计出评出每个等级的花的数量。

Input

第一行为N,K (1 <= N <= 100,000, 1 <= K <= 200,000 ), 分别表示花的数量和最大属性值。
以下N行,每行三个整数si, ci, mi (1 <= si, ci, mi <= K),表示第i朵花的属性

Output

包含N行,分别表示评级为0…N-1的每级花的数量。*/
//树套树  cdq分治不会
//卡时函数大视野竟然不认,给我报了n遍RE,气死我了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#define M 5000005
using namespace std;
struct shu
{
 int x,y,z;
}a[100005];
int n,m,sum[100005],ans[100005],sz,root[200005],w[M],v[M],sz1[M],lr[M],rr[M],rou[M];
int tmp;
bool cmp(shu a1,shu a2)
{
 if(a1.x==a2.x&&a1.y==a2.y)
   return a1.z<a2.z;
 if(a1.x==a2.x)
   return a1.y<a2.y;
 return a1.x<a2.x;
}
void update(int a1)
{
 sz1[a1]=sz1[lr[a1]]+sz1[rr[a1]]+w[a1];
}
void zuo(int &a1)
{
 int t=lr[a1];
 lr[a1]=rr[t];
 rr[t]=a1;
 update(a1);
 update(t);
 a1=t;
}
void you(int &a1)
{
 int t=rr[a1];
 rr[a1]=lr[t];
 lr[t]=a1;
 update(a1);
 update(t);
 a1=t;
}
void jiaa(int &a1,int a2)
{
 if(a1==0)
   {
    sz++;
    a1=sz;
    v[a1]=a2;
    sz1[a1]=1;
    w[a1]=1;
    rou[a1]=rand();
    return;
   } 
 sz1[a1]++;
 if(v[a1]==a2)
   {
    w[a1]++;
    return;
   }
 if(v[a1]>a2)
   {
    jiaa(lr[a1],a2);
    if(rou[lr[a1]]<rou[a1])
      zuo(a1);
   }
 else
   {
    jiaa(rr[a1],a2);
    if(rou[rr[a1]]<rou[a1])
      you(a1);
   }
}
void jia(int a1,int a2)
{
 for(;a1<=m;a1+=(a1&(-a1)))
   jiaa(root[a1],a2);
}
void askk(int a1,int a2)
{
 if(a1==0)
   return;
 if(v[a1]==a2)
    {
     tmp+=w[a1]+sz1[lr[a1]];
     return;
    }
 if(v[a1]>a2)
   askk(lr[a1],a2);
 else
   {
    tmp+=w[a1]+sz1[lr[a1]];
    askk(rr[a1],a2);
   }
 return;
}
void ask(int a1,int a2)
{
 for(;a1;a1-=(a1&(-a1)))
   askk(root[a1],a2);
}
int main()
{
 scanf("%d%d",&n,&m);
 for(int i=1;i<=n;i++)
   scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
 sort(a+1,a+n+1,cmp);
 for(int i=1;i<=n;i++)
  {
   if(a[i].y==a[i+1].y&&a[i].z==a[i+1].z&&a[i].x==a[i+1].x&&i!=n)
     sum[i+1]+=sum[i]+1;
   else
     {
      tmp=0;
      ask(a[i].y,a[i].z);
      ans[tmp]+=sum[i]+1;
  }
   jia(a[i].y,a[i].z);
     }
 for(int i=0;i<n;i++)
   printf("%d\n",ans[i]);
    return 0;
}

树套树【bzoj3262】陌上花开的更多相关文章

  1. 【BZOJ3262】陌上花开(树套树)

    [BZOJ3262]陌上花开(树套树) 题面 对于权限题,我这种苦逼肯定是从别的OJ上搞的对不对??? CJOJ 洛谷 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味 ...

  2. bzoj3262: 陌上花开(树套树)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

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

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

  4. BZOJ 3110: [Zjoi2013]K大数查询 [树套树]

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6050  Solved: 2007[Submit][Sta ...

  5. 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 ...

  6. bzoj3295: [Cqoi2011]动态逆序对(树套树)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  7. BZOJ 3110 k大数查询 & 树套树

    题意: 有n个位置,每个位置可以看做一个集合,现在要求你实现一个数据结构支持以下功能: 1:在a-b的集合中插入一个数 2:询问a-b集合中所有元素的第k大. SOL: 调得火大! 李建说数据结构题能 ...

  8. BZOJ 3110 树套树 && 永久化标记

    感觉树套树是个非常高深的数据结构.从来没写过 #include <iostream> #include <cstdio> #include <algorithm> ...

  9. 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树套树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1901 这题调了我相当长的时间,1wa1a,我是第一次写树套树,这个是树状数组套splay,在每个区间 ...

随机推荐

  1. 微软商店一直安装不上Intel Media SDK DFP

    具体表现为一直安装失败,但是下载进度条一直在,无法去除. 此方法来自 https://answers.microsoft.com/en-us/windows/forum/all/error-code- ...

  2. Task 开始 停止

    注意点:需要将每个线程的 MemoryCacheManager 保存,这里我保存在缓存中,需要取消时根据缓存key值取出 MemoryCacheManager //开始Task1 private vo ...

  3. Matlab匿名函数,子函数,私有函数,重载函数,eval和feval函数

    匿名函数,子函数,私有函数等函数类型 匿名函数: 匿名函数没有函数名,也不是.m文件,只包含一个表达式和输入输出参数. Fxy=@(x,y)x.^y+3*x*y x,y为输入输入参数,Fxy为函数名 ...

  4. hibernate saveorupdate方法只有更新有效果,保存没有效果

    转自:https://blog.csdn.net/KAIXINLUOYE/article/details/72821014 单主键生成策略由native改成assigned后,问题解决.

  5. 基本代码、插值表达式、v-cloak

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. ajax+jquery上传图片

    利用ajax进行图片上传,啥也不说了,上代码~ <input type="file" id="uploadImg"> <span  oncli ...

  7. C++——virtual function

    无论是pure virtual还是impure virtual,都允许子类override他.但是真两种方式还是有一点差别,如果是pure virtual,那么父类是十分强烈希望子类override他 ...

  8. Guava【google】

    Guava 是什么? Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库.这个库是为了方便编码,并减少编码错误.这个库提供用于集合,缓存,支持原语,并发性,常见注解, ...

  9. 阿里P7架构师是如何解决跨域问题的!你有遇到吗?

    现在越来越多的项目就算是一个管理后端也偏向于使用前后端分离的部署方式去做,为了顺应时代的潮流,一前后端分离就产生了跨域问题,所以许多同学把跨域和前后端分离项目联系在了一起,其实跨域产生的原因并不是前后 ...

  10. jmeter 5.1.1版本 进行抓包的时候弹出输入密码

    先描述一下如何配置Jmeter 先新建一个Thread Group,比如我命令为抓包 新建一个HTTP(S) Test Script Recorder,进行如下的配置, 配置端口,我这边设置为8899 ...