【CJOJ2433】陌上花开 树状数组套替罪羊树


蛤?bzoj?没权限QAQ

蛤?CDQ?看了好久没看懂QwQ

好吧我会拿cdq再写一遍的

为啥我感觉这东西比cdq好写

只好拿树状数组套替罪羊树水水了。

先排序一遍,保证对于所有的花,比这朵花美丽的都在它后面。(重复不算)

然后按照b建树状数组,树状数组每个节点按照c建替罪羊树。(只有插入)

然后就水过去了,,,

数组开小身败名裂QwQ因为数组开小调了一个多小时

SGT空间理论上\(O(nlgn)\),实际上max_=1e6也能过。

// It is made by XZZ
#include<cstdio>
#include<algorithm>
using namespace std;
#define rep(a,b,c) for(rg int a=b;a<=c;a++)
#define drep(a,b,c) for(rg int a=b;a>=c;a--)
#define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
rg int x=0;rg bool flg=0;rg char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')flg=1;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return flg?-x:x;
}
const int maxn=100002,maxk=200001;
typedef const int& fast;
namespace sgt{
const double alpha=0.7233333;
const int max_=1e6+2333;
int cnt,gg[maxk],sum[max_],cov[max_],ch[max_][2],siz[max_],val[max_],root[maxk],id=0;
il vd dfs(fast x){if(x)dfs(ch[x][0]),gg[++cnt]=x,dfs(ch[x][1]);}
il int divide(int l,int r){
if(l>r)return 0;
#define mid ((l+r)>>1)
ch[gg[mid]][0]=divide(l,mid-1);
ch[gg[mid]][1]=divide(mid+1,r);
siz[gg[mid]]=r-l+1;
cov[gg[mid]]=cov[ch[gg[mid]][0]]+cov[ch[gg[mid]][1]]+sum[gg[mid]];
return gg[mid];
#undef mid
}
il int*_ins(int&x,fast num,fast total){
if(!x){x=++id,val[x]=num,siz[x]=1,sum[x]=total,cov[x]=total;return NULL;}
if(val[x]==num){cov[x]+=total,sum[x]+=total;return NULL;}
int*p=_ins(ch[x][num>val[x]],num,total);
if(siz[x]*alpha+3<min(siz[ch[x][0]],siz[ch[x][1]]))p=&x;
siz[x]=siz[ch[x][0]]+siz[ch[x][1]]+1;
cov[x]=cov[ch[x][0]]+cov[ch[x][1]]+sum[x];
return p;
}
il vd ins(int rt,int num,int total){
int*p=_ins(root[rt],num,total);
if(p)cnt=0,dfs(root[rt]),root[rt]=divide(1,cnt);
}
il int query(int rt,int num){
int ret=0,x=root[rt];
while(x){
if(val[x]==num)return ret+cov[ch[x][0]]+sum[x];
if(val[x]>num)x=ch[x][0];
else ret+=cov[ch[x][0]]+sum[x],x=ch[x][1];
}
return ret;
}
}
struct frog{int a,b,c;}f[maxn];
bool operator == (const frog&a,const frog&b){return a.a==b.a&&a.b==b.b&&a.c==b.c;}
il bool cmp(const frog&a,const frog&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;
}
int ans[maxn];
#define lb(o) ((o)&-(o))
int main(){
int n=gi(),k=gi();
using namespace sgt;
rep(i,1,n)f[i].a=gi(),f[i].b=gi(),f[i].c=gi();
sort(f+1,f+n+1,cmp);
int __ans,cnt=0;
rep(i,1,n){
++cnt;
if(f[i]==f[i+1])continue;
__ans=0;
for(int j=f[i].b;j;j-=lb(j))__ans+=query(j,f[i].c);
ans[__ans+cnt-1]+=cnt;
for(int j=f[i].b;j<=k;j+=lb(j))ins(j,f[i].c,cnt);
cnt=0;
}
rep(i,1,n)printf("%d\n",ans[i-1]);
return 0;
}

【CJOJ2433】陌上花开 树状数组套替罪羊树的更多相关文章

  1. BZOJ 3196 Tyvj 1730 二逼平衡树 ——树状数组套主席树

    [题目分析] 听说是树套树.(雾) 怒写树状数组套主席树,然后就Rank1了.23333 单点修改,区间查询+k大数查询=树状数组套主席树. [代码] #include <cstdio> ...

  2. BZOJ 1901 Zju2112 Dynamic Rankings ——树状数组套主席树

    [题目分析] BZOJ这个题目抄的挺霸气. 主席树是第一时间想到的,但是修改又很麻烦. 看了别人的题解,原来还是可以用均摊的思想,用树状数组套主席树. 学到了新的姿势,2333o(* ̄▽ ̄*)ブ [代 ...

  3. BZOJ1901 - Dynamic Rankings(树状数组套主席树)

    题目大意 给定一个有N个数字的序列,然后又m个指令,指令种类只有两种,形式如下: Q l r k 要求你查询区间[l,r]第k小的数是哪个 C i t  要求你把第i个数修改为t 题解 动态的区间第k ...

  4. bzoj 3110: [Zjoi2013]K大数查询 树状数组套线段树

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1384  Solved: 629[Submit][Stat ...

  5. [BZOJ 3196] 213平衡树 【线段树套set + 树状数组套线段树】

    题目链接:BZOJ - 3196 题目分析 区间Kth和区间Rank用树状数组套线段树实现,区间前驱后继用线段树套set实现. 为了节省空间,需要离线,先离散化,这样需要的数组大小可以小一些,可以卡过 ...

  6. [BZOJ 1901] Dynamic Rankings 【树状数组套线段树 || 线段树套线段树】

    题目链接:BZOJ - 1901 题目分析 树状数组套线段树或线段树套线段树都可以解决这道题. 第一层是区间,第二层是权值. 空间复杂度和时间复杂度均为 O(n log^2 n). 线段树比树状数组麻 ...

  7. BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树

    BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...

  8. ZOJ 2112 Dynamic Rankings(树状数组套主席树 可修改区间第k小)题解

    题意:求区间第k小,节点可修改 思路:如果直接用静态第k小去做,显然我更改一个节点后,后面的树都要改,这个复杂度太高.那么我们想到树状数组思路,树状数组是求前缀和,那么我们可以用树状数组套主席树,求出 ...

  9. BZOJ.4553.[HEOI2016&TJOI2016]序列(DP 树状数组套线段树/二维线段树(MLE) 动态开点)

    题目链接:BZOJ 洛谷 \(O(n^2)\)DP很好写,对于当前的i从之前满足条件的j中选一个最大值,\(dp[i]=d[j]+1\) for(int j=1; j<i; ++j) if(a[ ...

随机推荐

  1. 超简易复制Model对象(为后续备忘录设计模式博文做铺垫)

    超简易复制Model对象(为后续备忘录设计模式博文做铺垫) 复制整个Model需要实现NSCopy协议,可以想象是非常麻烦的一件事情,今天我跟大家分享一个不需要你做任何操作的复制Model对象的方法, ...

  2. UI(一)

    1.AfxWinMain 首先,MFC程序先执行到TheApp实例化对象也就是通过这句CTestApp the App来实例化对象的然后,调用CTestApp构造函数分配内存空间 然后,就调用了Afx ...

  3. Aria2 无限制下载神器

    Aria2 是一款免费开源跨平台且不限速的多线程下载软件,Aria2的优点是速度快.体积小.资源占用少:支持 HTTP / FTP / BT / Magnet 磁力链接等类型的文件下载:支持 Win. ...

  4. .Net WebApi 支持跨域访问使用 Microsoft.AspNet.WebApi.Cors

    首先导入Cors库,通过程序包管理控制台导入 Install-Package Microsoft.AspNet.WebApi.Cors 引用库之后,我们需要进行简单的配置. 现在WebApiConfi ...

  5. php 实现hash表

    hash表又称散列表,通过把关键字key经过hash函数映射到hash表中某个位置获取记录. 存放记录的数组又称为hash表,映射函数称为hash函数 下面是php中实现hash表的方法 <?p ...

  6. React 异步组件

    之前写过一篇 Vue 异步组件的文章,最近在做一个简单项目的时候又想用到 React 异步组件,所以简单地了解了一下使用方法,这里做下笔记. 传统的 React 异步组件基本都靠自己实现,自己写一个专 ...

  7. golang xorm应用

    github.com/go-xorm/xorm  xorm库 http://www.xorm.io/docs/ 手册 xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便.xo ...

  8. Linux - 常用归档、压缩命令

    1. ncompress compress命令是一个相当古老的 unix 档案压缩指令,压缩后的文件会加上一个 .Z 的后缀名,默认不会保留源文件.compress只能对文件进行压缩,若要压缩目录,先 ...

  9. http_load安装和使用

    一.安装 wget http://soft.vpser.net/test/http_load/http_load-12mar2006.tar.gz tar zxvf http_load-12mar20 ...

  10. Python基础-画图:matplotlib.pyplot.scatter

    转载自博客:https://blog.csdn.net/qiu931110/article/details/68130199 matplotlib.pyplot.scatter 1.scatter函数 ...