hdu 6183 线段树的空间优化
来源:互联网 发布:遗传算法c语言代码 编辑:程序博客网 时间:2024/05/17 02:02
题意:
一个空的坐标系,有④种操作:①1 x y c表示在(x, y)点染上颜色c;②2 X y1 y2表示查询在(1, y1)到(X, y2)范围内有多少种不同的颜色:
③0表示清屏;④3表示程序退出(0<=x, y<=1000000, 0<=c<=50)
思路:开五十个线段树(一种颜色一个),以y为下表,保存min x,(因为查询x固定1---X)然后暴力查询50个就好了
但是显然碰到了一个问题,1e6 开50个线段树显然不现实。。所以需要空间优化一下。。。这里我们考虑动态来开辟线段树,有效的节点进行分配,无效则不分配。。。提问,这样空间为什么是合理的呢?其实因为一个add 最多开logn个节点,单组只有1.5e5次查询,显然,最多也就只开了qlogn个。那么这样空间复杂度就是合理的了。。具体动态开辟的实现也非常简单,类比trie,见代码。
代码:
#include<bits/stdc++.h>using namespace std;#define MEM(x,y) memset(x,y,sizeof(x));const int maxn=3e6+10;int root[55];int L[maxn],R[maxn],tot,sum[maxn];void update(int &rt,int idx,int val,int l,int r){ if(rt==-1) rt=tot++; sum[rt]=min(val,sum[rt]); if(l==r) return; int mid=(l+r)/2; if(idx<=mid) update(L[rt],idx,val,l,mid); else update(R[rt],idx,val,mid+1,r); return;}int query(int rt,int l,int r,int ll,int rr){ int ret=1e9; if(rt==-1) return ret; if(ll==l&&rr==r) return sum[rt]; int mid=(ll+rr)/2; if(r<=mid) ret=query(L[rt],l,r,ll,mid); else if(l>mid) ret=query(R[rt],l,r,mid+1,rr); else ret=min(query(L[rt],l,mid,ll,mid),query(R[rt],mid+1,r,mid+1,rr)); return ret;}int main(){ int t,n,op,x,y,y1,y2,c,ret; while(scanf("%d",&op)){ if(op==0){ MEM(L,-1);MEM(R,-1); for(int i=0;i<maxn;++i) sum[i]=1e9; tot=52; } else if(op==1){ scanf("%d%d%d",&x,&y,&c); update(c,y,x,1,1e6); } else if(op==2){ scanf("%d%d%d",&x,&y1,&y2); ret=0; for(int i=0;i<=50;++i) ret+=(query(i,y1,y2,1,1e6)<=x); printf("%d\n",ret); } else if(op==3) break; }}
阅读全文
0 0
- hdu 6183 线段树的空间优化
- hdu 4391 线段树 优化
- hdu 4262 线段树优化
- HDU 6183 Color it(线段树+思维+高端的优化技巧)
- 二倍空间的线段树
- HDU 4262 Juggler (模拟+线段树优化)
- HDU - 1542 (扫描线+线段树优化)
- HDU - 5091(扫描线 + 线段树优化)
- Hdu 2795-Billboard【线段树 优化】
- hdu 4521(线段树优化dp)
- hdu 5195(拓扑排序+线段树优化)
- HDU-4722-线段树优化dp
- hdu 6183 【线段树的巧妙】
- 线段树—离散化压缩空间优化
- 线段树+优化(hdu 5828 hdu 4027)
- hdu 2795 Billboard(线段树-剩余空间)
- hdu简单的线段树
- 空间优化的字典树
- 背景 盒模型
- Android程序的安全系统 apk获得root权限
- centos7删除启动引导无用菜单项
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- 训练总结 9.7
- hdu 6183 线段树的空间优化
- Array对象方法
- sql_mode中的STRICT_TRANS_TABLES和STRICT_ALL_TABLES区别
- Kafka入门
- PLSQL_性能优化系列15_Oracle Explain Plan解析计划解读
- 51nod 1040 最大公约数之和(欧拉函数)
- 跑动的妹子
- Android群英传学习——第五章、Android Scroll分析
- 模块编译