【BZOJ3262】陌上花开(CDQ分治)
来源:互联网 发布:mac os x系统官网下载 编辑:程序博客网 时间:2024/05/21 01:56
题解
原来放过这道题目,题面在这里
树套树的做法也请点上面
这回用CDQ分治做的
其实也很简单,
对于第一维排序之后
显然只有前面的对后面的才会产生贡献
那么,使用CDQ分治
先分,每次递归子问题
合并的时候每次考虑前面的对于后面的贡献
最后统计一下答案
如果在清空树状数组的时候用了memset会TLE
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<set>#include<map>#include<queue>#include<vector>using namespace std;#define MAX 110000inline int read(){ int x=0,t=1;char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=-1,ch=getchar(); while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar(); return x*t;}int c[MAX<<1],n,K;int ans[MAX];struct TNode{int a,b,c,w,ans;}t[MAX];bool operator<(TNode x,TNode y){ if(x.a!=y.a)return x.a<y.a; if(x.b!=y.b)return x.b<y.b; return x.c<y.c;}bool operator==(TNode a,TNode b){ return a.a==b.a&&a.b==b.b&&a.c==b.c;}bool cmp(TNode x,TNode y){ if(x.b!=y.b)return x.b<y.b; return x.c<y.c;}inline int lowbit(int x){return x&(-x);}inline void Add(int x,int w){while(x<=K)c[x]+=w,x+=lowbit(x);}inline int Getsum(int x){int ret=0;while(x)ret+=c[x],x-=lowbit(x);return ret;}void CDQ(int l,int r){ if(l==r)return; int mid=(l+r)>>1; CDQ(l,mid);CDQ(mid+1,r); sort(&t[l],&t[mid+1],cmp); sort(&t[mid+1],&t[r+1],cmp); int i=l; for(int j=mid+1;j<=r;++j) { while(i<=mid&&t[j].b>=t[i].b) { Add(t[i].c,t[i].w); ++i; } t[j].ans+=Getsum(t[j].c); } for(int j=l;j<i;++j)Add(t[j].c,-t[j].w); //memset(c,0,sizeof(c));}int main(){ n=read();K=read(); for(int i=1;i<=n;++i) t[i].a=read(),t[i].b=read(),t[i].c=read(); sort(&t[1],&t[n+1]); int tot=0; for(int i=1;i<=n;++i) { if(t[i]==t[i-1])++t[tot].w; else t[++tot]=t[i],t[tot].w++; } int N=n; n=tot; CDQ(1,n); for(int i=1;i<=n;++i)ans[t[i].ans+t[i].w-1]+=t[i].w; for(int i=0;i<N;++i) printf("%d\n",ans[i]); return 0;}
阅读全文
0 0
- [BZOJ3262]陌上花开(cdq分治+bit)
- [BZOJ3262]陌上花开(cdq分治+bit)
- BZOJ3262: 陌上花开(CDQ分治)
- 【BZOJ3262】陌上花开(CDQ分治)
- bzoj3262 陌上花开(CDQ分治)
- [BZOJ3262] 陌上花开 - CDQ分治
- 【bzoj3262】陌上花开 CDQ分治+树状数组
- [CDQ分治] [树状数组] [BZOJ3262] 陌上花开
- BZOJ3262: 陌上花开 CDQ
- [bzoj3262]陌上花开 三维偏序 cdq分治+树状数组
- bzoj3262陌上花开 cdq分治 三维偏序
- BZOJ 3262 陌上花开(CDQ分治)
- bzoj 3262: 陌上花开(cdq分治)
- BZOJ 3262 陌上花开 (CDQ分治)
- bzoj 3262: 陌上花开(cdq分治)
- BZOJ 3262: 陌上花开(CDQ分治)
- 【bzoj 3262】陌上花开(CDQ分治)
- [BZOJ3262]陌上花开 && CDQ+树状数组
- Java序谈之多态知识
- 做什么职业,也别做程序员,尤其是java程序员
- 自定义gridview
- django 运行报错:某个class 没有 objects 属性问题?及解决方案。
- Linux_top
- 【BZOJ3262】陌上花开(CDQ分治)
- 图论第四次课
- 【基础算法】万圣节大礼包
- 数据库视频(三)
- 717. 1-bit and 2-bit Characters。
- 数据结构--红黑树
- Spring Boot 动态数据源(多数据源自动切换)
- servlet的url-pattern匹配规则详细描述
- leetcode 455. Assign Cookies