【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. python基础_类型_tuple

    #tuple 元祖,这个没什么特别的,和list差不多,不能删除,不能增加元素,其他功能差不多 #元祖用圆括号扩起来,逗号分隔 a = ('a','b','c') #这玩意一般会用来排除重复,还是很好 ...

  2. TableView的cell加载倒计时重用问题解决方案

    TableView的cell加载倒计时重用问题解决方案 效果 说明 1. 写过类似需求的朋友一定知道,TableView上面加载倒计时功能会遇到复杂的重用问题难以解决 2. 本人提供一种解决思路,高效 ...

  3. Bootstrap后台管理框架

    B-JUI http://www.xknaan.com/ B-JUI 前端框架,基于Bootstrap的Jquery UI框架,核心思想脱胎于DWZ(j-ui).   BJUI_SSM_DEMO 基于 ...

  4. zabbix日常监控(监控缓存)

    实现的方法大体类似: 多谢博主的文章,免了不少时间! 摘抄博文地址:https://www.cnblogs.com/sixiweb/p/6893858.html https://www.cnblogs ...

  5. EBS中比较复杂的trace方法

    FND LOG Messages-------------------------a) Using the System Administrator Responsibility, navigate  ...

  6. 如何搭建github+hexo博客-转

    1.前言 其实早在这之前我就一直想过写博客,但由于种种原因一直没有去学习这方面的知识,最近半个月(从开始动手到搭建好)一直陆陆续续的在着手这方面的工作.从开始到搭建完成的过程中遇到了很多困难,因为在这 ...

  7. Python内置函数locals和globals

    globals()和locals() locals()实际上没有返回局部名字空间,它返回的是一个拷贝.所以对它进行修改,修改的是拷贝,而对实际的局部名字空间中的变量值并无影响. globals()返回 ...

  8. Python自动化之跨域访问jsonp

    这里提到了JSONP,那有人就问了,它同JSON有什么区别不同和区别呢,接下我们就来看看,百度百科有以下说明: ''' 1. JSON(JavaScript Object Notation) 是一种轻 ...

  9. Java 中 Emoji 的正则表达式

    一.emoji 的范围 查阅维基百科中 emoji 的说明 1. 杂项符号及图形 杂项符号及图形一共有768个字符,范围为: U+1F300 - U+1F5FF,在 Java 中正则表达式为: &qu ...

  10. the django travel three[form表单验证]

    一:表单验证: 场景:因为浏览器的js可以被禁用,所以需要做后台的输入合法的验证. A:ajax发请求.需要注意的是ajax POST的数据的key值和form表单的里的字段名字一致,否则得不到验证! ...