hdu 6183 线段树的空间优化

题意:

一个空的坐标系,有④种操作:①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;}
}




 

转载于:https://www.cnblogs.com/zhangxianlong/p/10672487.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js 判断数据是否为空

// var a ""; // var a " "; // var a null; // var a undefined; // var a []; // var a {}; // var a NaN;if(a undefined) { // 只能用 运算来测试某个值是否是未定义的console.log("为undefined");}if(a nul…

Aspx 页面生命周期

ASP.NET 页运行时&#xff0c;此页将经历一个生命周期&#xff0c;在生命周期中将执行一系列处理步骤。这些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。了解页的生命周期非常重要&#xff0c;这样就能在合适的生命周期阶段编写代码&#…

Python 练习册,每天一个小程序

Python 练习册&#xff0c;每天一个小程序说明&#xff1a;Python 练习册&#xff0c;每天一个小程序。注&#xff1a;将 Python 换成其他语言&#xff0c;大多数题目也适用不会出现诸如「打印九九乘法表」、「打印水仙花」之类的题目点此链接&#xff0c;会看到每个题目的代码…

添加永久路由的方法

配置文件配置路由的方法&#xff1a; 直接编辑/etc/sysconfig/static-routes&#xff1a; vim /etc/sysconfig/static-routes 根据需要配置&#xff0c;比如&#xff1a; 192.168.90.52增加一条路由 172.0.0.0\8 指向 192.168.91.12 默认网关不变&#xff0c;增加的路由&am…

CentOS/Linux 解决 SSH 连接慢

现在连接linux服务器一般都是使用SSH远程连接的方式。最近新装了一台服务器&#xff0c;发现telnet时速度很快&#xff0c;ping时一切也正常&#xff0c;但SSH连接的时候却很慢。经过网上资料查询&#xff0c;大致是有以下几种原因&#xff1a; 1、SERVER的SSHD会去DNS查找访问…

在浏览器控制台输出内容 console.log(string);

在浏览器控制台中写如数据 1添加 <script type"text/javascript">djConfig { isDebug: true };</script> 在<script>写入需要输出的内容 <script> 如&#xff1a; 1 2 3 4 5 6 7 8 dojo.require("esri.map"); fu…

php支付宝开发

1.下载对应的接口demo&#xff0c;注意退款有无密和有密 2.根据接口代码编写&#xff0c;要注意notify_url和return_url不能带有额外参数&#xff0c;并且notify_url中途不能含有跳转&#xff0c;否则post数据会丢失 3.密钥的配置&#xff0c;根据openssl生成密钥和私钥&#x…

不同网段虚拟机,互相访问时的路由配置,附路由知识学习

事情实例&#xff1a; 虚拟主机&#xff1a;192.168.90.247需要访问192.168.91.XX网段的数据库&#xff0c;无法访问。 1、这里要考虑一下添加一个路由&#xff0c;目的地址为192.168.91.XX,掩码为255.255.255.0&#xff0c;网关为如图所示 2、这里添加一个路由为&#xff1a;…

iOS使用自定义字体(添加字体包)

转载请注明出处&#xff01;&#xff01;&#xff01; 首先是最简单也普遍的做法&#xff0c;打包内置字符库文件&#xff1a; 步骤如下&#xff1a; 1.第一步找到你想用的字体的 ttf 格式。加入到你的工程的resouce目录下。 2.在工程的plist中AddRow&#xff0c;“Fonts provi…

zookeeper 应用开发

由于zookeeper的client只有zookeeper一个对象&#xff0c;使用也比较简单&#xff0c;所以就不许要文字说明了&#xff0c;在代码中注释下就ok 了。 1、测试用的main方法 package ClientExample; public class TestMain { public static void main(String[] args) { /* * …

CentOS 下安装xdebug

在CentOS 6.x 的系统中&#xff0c;是集成xdebug 的&#xff0c; yum install php-pecl-xdebug 如果是CentOS.5 也可能通过安装安装 epel 来安装 rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm 然后 yum install php-pecl-xdebug 再在p…

TP5:框架下载与安装——1

哪里下载&#xff1f; 一、百度搜索&#xff1a;ThinkPHP5.0完全开发手册 可以在找到安装TP5的介绍&#xff0c;分别有官网下载安装、Composer安装、Git安装三种方式下载 二、下载好文件 这里我们选择了GIT方式安装&#xff0c;要注意的是&#xff0c;要同时下载应用项目和核…

python 判断字符串是否为空用什么方法?

s if s.strip():print s is null #或者 if not s.strip():print s is null

游戏密保卡图片识别

识别主要步骤 1.图像预处理。包括确认图片有效区域&#xff0c;灰度化&#xff0c;二值化。 2.字符分割。即将识别信息最小化。由于密保卡图片文字宽度固定且无粘连&#xff0c;只需要使用固定宽度切割。 3.对分割后的信息提取特征,建立特征库 4.提取特征和特征库样本进行匹配&…

基于visual Studio2013解决C语言竞赛题之0505选数

&#xfeff;&#xfeff;题目解决代码及点评/************************************************************************/ /* 5&#xff0e; 输入N个数到数组中&#xff0c;选出其中最大的数和最小的数&#xff0c;并分别将它们与最前面和最后面的数互换 */ /*************…

java PKCS7Padding 加密Cannot find any provider supporting AES/CBC/PKCS7Padding 解决办法

在java中用aes256进行加密&#xff0c;但是发现java里面不能使用PKCS7Padding&#xff0c;而java中自带的是PKCS5Padding填充&#xff0c;那解决办法是&#xff0c;通过BouncyCastle组件来让java里面支持PKCS7Padding填充。 説辣么多不如上代码&#xff1a; public class AESUt…

C++经典面试题(最全,面中率最高)

C经典面试题&#xff08;最全&#xff0c;面中率最高&#xff09; 1.new、delete、malloc、free关系 delete会调用对象的析构函数,和new对应free只会释放内存&#xff0c;new调用构造函数。malloc与free是C/C语言的标准库函数&#xff0c;new/delete是C的运算符。它们都可用于申…

datatables 更新选中行 的一行数据

var d table.row(.selected).data();d.columns Your-Data; table.rows(.selected).invalidate(); table.rows(.selected).data(d).draw(); 注&#xff1a; d.colums 为&#xff0c;datatables 表中 某列的 键&#xff08;key&#xff09;值 参考: https://datatables.net/re…

TP5:缩短访问路径和路由的使用——2

一、缩短访问路径 1、如图访问该文件路径 没有缩短之前&#xff0c;访问的路径是 http://localhost/zerg_new/public/index.php/api/v1/banner/1 缩短后&#xff0c;访问的路径是 http://z_new.cn/api/v1/banner/1 2、缩短路径步骤 本机apache配置&#xff0c;小编使用的…

javascript 点点滴滴01章 javascript的认知

hello world: 大家早上好 &#xff0c;所谓一年之计在于春&#xff0c;一日之计在于晨。今天开始学习 高级程序设计第三版 第二遍 以前以迅雷不及掩耳之势草草看过一遍 &#xff0c;但是什么也没记住 已经忘得差不多了。哈哈&#xff0c;原来我不是黄蓉&#xff0c;也不是天才&…