bzoj3262: 陌上花开
来源:互联网 发布:os系统优化 编辑:程序博客网 时间:2024/06/11 03:59
链接
http://www.lydsy.com/JudgeOnline/problem.php?id=3262
题解
第一道CDQ分治。
第三维
将所有的点按照
注意有些点是长得完全一样的,要合并处理。
一个问题:显然
如果改为每次把加进去的点删掉,那么初始化的时间复杂度是
整个算法的时间复杂度:
一共
代码
//cdq分治+树状数组 #include <cstdio>#include <algorithm>#define maxn 200010#define lowbit(x) (x&-x)using namespace std;struct quiry{int x, y, z, cnt, ans;}q[maxn];int bit[maxn], N, K, tong[maxn], tmp;inline void add(int pos, int v){for(;pos<=K;pos+=lowbit(pos))bit[pos]+=v;}inline int sum(int pos){ int ans=0; for(;pos;pos-=lowbit(pos))ans+=bit[pos]; return ans;}inline bool operator<(quiry a, quiry b){ if(a.z==b.z) { if(a.x==b.x)return a.y<b.y; else return a.x<b.x; } return a.z<b.z;}inline bool cmp(quiry a, quiry b){return a.x==b.x?a.y<b.y:a.x<b.x;}inline int read(int x=0){ char c=getchar(); while(c<48 or c>57)c=getchar(); while(c>=48 and c<=57)x=(x<<1)+(x<<3)+c-48,c=getchar(); return x;}void init(){ int i, x=0; N=read(), K=read(); for(i=1;i<=N;i++)q[i].x=read(), q[i].y=read(), q[i].z=read(), q[i].cnt=1; sort(q+1,q+N+1); for(i=1;i<=N;i++) if(q[i].x!=q[i-1].x or q[i].y!=q[i-1].y or q[i].z!=q[i-1].z)q[++x]=q[i]; else q[x].cnt++; tmp=N,N=x; for(i=1;i<=N;i++)q[i].ans+=q[i].cnt-1;}void solve(int l, int r){ int mid=(l+r)>>1, i, j; if(l==r)return; solve(l,mid), solve(mid+1,r); sort(q+l,q+mid+1,cmp), sort(q+mid+1,q+r+1,cmp); for(i=l,j=mid+1;j<=r;j++) { for(;q[i].x<=q[j].x and i<=mid;i++)add(q[i].y,q[i].cnt); q[j].ans+=sum(q[j].y); } for(i=l;i<=mid and q[i].x<=q[r].x;i++)add(q[i].y,-q[i].cnt);}void show(){ int i; for(i=1;i<=N;i++)tong[q[i].ans]+=q[i].cnt; for(i=0;i<tmp;i++)printf("%d\n",tong[i]);}int main(){ init(); solve(1,N); show(); return 0;}
0 0
- BZOJ3262 陌上花开 Solution
- 【BZOJ3262】陌上花开
- BZOJ3262: 陌上花开 CDQ
- [BZOJ3262] 陌上花开
- [BZOJ3262]陌上花开
- 【bzoj3262】陌上花开
- bzoj3262: 陌上花开
- bzoj3262: 陌上花开
- BZOJ3262 陌上花开
- 【bzoj3262】陌上花开
- bzoj3262: 陌上花开
- 【bzoj3262】陌上花开
- BZOJ3262: 陌上花开
- bzoj3262 陌上花开
- [BZOJ3262] 陌上花开 - CDQ分治
- bzoj3262 陌上花开【解法一】
- bzoj3262 陌上花开【解法二】
- 【BZOJ3262】陌上花开(树套树)
- MPI广播
- Android Handler 简单使用
- 提高看log效率的小工具
- 同余方程总结
- gunicorn Arbiter 源码解析
- bzoj3262: 陌上花开
- 数据结构:实验六(单循环链表实现链式队列)
- 【ZOJ3160】Couples(区间dp)
- 算法导论笔记——最长公共子序列
- WEB下excel导出
- 深入浅出K-Means算法
- 火柴棍等式
- C#里partial关键字的作用
- lambda 与def 的区别&lambda 学习