题目链接

题目大意

有一个矩阵,总共有4种操作

0:清空这个矩阵

1 x y c:将\((x,y)(1 \leq x ,y\leq 10^6)\)这个点加上一种颜色c\((0\leq c \leq 50)\)(注意是加上,也就是之前的颜色不会被覆盖)

2 x y1 y2:查询左上角为\((1,y1)\),右下角为\((x,y2)\)的矩阵中的颜色个数。

3:结束程序

0操作不超过10次,1操作和2操作不超过150000次

思路

先考虑空间足够的情况下应该怎么做。对于每个颜色开一个线段树。第i个位置储存,这个颜色中第i列最小的x是多少,因为每次查询都是从(1,y1)到(x,y2),所以查询一种颜色的时候,只要看从y1到y2中最小的值是不是比x小就行了,如果比x小,就说明存在这种颜色。

上面的空间复杂度为\(50*10^6\),空间不够,所以考虑动态开点线段树。记录下每种颜色的根,然后分别动态开点插入即可。空间复杂度\((nlogn) n=150000\)

直接正常查询对于这道题是会超时的,所以要优化一下。也就是如果当前找到这种颜色了,就退出就行了。

代码

/*
* @Author: wxyww
* @Date: 2018-12-10 10:39:02
* @Last Modified time: 2018-12-10 11:20:39
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<ctime>
#include<bitset>
using namespace std;
typedef long long ll;
const int N = 200000 + 100,INF = 1e7,M = 1e6;
ll read() {
ll x=0,f=1;char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
int tree[N * 20],ls[N * 20],rs[N * 20],root[55];
int num;
void update(int &rt,int l,int r,int pos,int c) {
if(!rt) {
rt = ++num;
tree[rt] = c;
}
tree[rt] = min(tree[rt],c);
if(l == r) return;
int mid = (l + r) >> 1;
if(pos <= mid) update(ls[rt],l,mid,pos,c);
else update(rs[rt],mid + 1,r,pos,c);
}
int tag,cx;
void query(int rt,int l,int r,int L,int R) {
if(!rt || tag) return;
if(L <= l && R >= r) {
if(tree[rt] <= cx) tag = 1;
return;
}
int mid = (l + r) >> 1;
if(L <= mid) query(ls[rt],l,mid,L,R);
if(R > mid) query(rs[rt],mid + 1,r,L,R);
}
int main() {
while(1) {
int opt = read();
if(opt == 3) return 0;
if(opt == 0) {
memset(tree,0x3f,sizeof(tree));
memset(root,0,sizeof(root));
num = 0;
memset(ls,0,sizeof(ls));
memset(rs,0,sizeof(rs));
}
if(opt == 1) {
int x = read(),y = read(),c = read();
update(root[c],1,M,y,x);
}
if(opt == 2) {
cx = read();int y1 = read(),y2 = read();
int ans = 0;
for(int i = 0;i <= 50;++i) {
tag = 0;
query(root[i],1,M,y1,y2);
ans += tag;
}
printf("%d\n",ans);
}
} return 0;
}

[hdu6183][Color it]的更多相关文章

  1. 2018.07.08 hdu6183 Color it(线段树)

    Color it Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Proble ...

  2. hdu6183 Color it 线段树动态开点+查询减枝

    题目传送门 题目大意: 有多次操作.操作0是清空二维平面的点,操作1是往二维平面(x,y)上放一个颜色为c的点,操作2是查询一个贴着y轴的矩形内有几种颜色的点,操作3退出程序. 思路: 由于查询的矩形 ...

  3. 【线段树】hdu6183 Color it

    题意: 维护一个数据结构,支持三种操作: ①在平面上(x,y)处添加一个颜色为c的点. ②询问平面上(1,y1)-(x,y2)范围内,有多少种不同颜色的点. ③清除平面上所有点. 颜色数量很少,对于每 ...

  4. HDU6183 Color it (线段树动态开点)

    题意: 一个1e6*1e6的棋盘,有两个操作:给(x,y)加上颜色c,或查找(1,y1)到(x,y2)内的颜色种类数量,最多有50种颜色 思路: 建立50颗线段树,对每个颜色的线段树,维护每个y坐标上 ...

  5. 【转】c#、wpf 字符串,color,brush之间的转换

    转自:http://www.cnblogs.com/wj-love/archive/2012/09/14/2685281.html 1,将#3C3C3C 赋给background this.selec ...

  6. Python为8bit深度图像应用color map

    图片中存在着色版的概念,二维矩阵的每个元素的值指定了一种颜色,因此可以显示出彩色. 迁移调色板 下述python代码将VOC数据集中的某个语义分割的图片的调色板直接应用在一个二维矩阵代表的图像上 #l ...

  7. (转)System.Drawing.Color的颜色对照表

    经常使用System.Drawing.Color, 本篇介绍一下颜色与名称及RGB值的对应关系. 1. 颜色与名称的对照表(点击下图放大看): 2. 颜色与RGB值对照表: Color.AliceBl ...

  8. 激光打印机的Color/paper, Xerography介绍

    Color Basic 看见色彩三要素: 光源,物体,视觉 加色色彩模型:R,G,B 多用于显示器 减色色彩模型:C,M,Y,K 多用于打印复印 Paper 东亚地区常用A系列标准用纸,在多功能一体机 ...

  9. 安卓工具箱:color of Style

    <?xml version="1.0" encoding="utf-8"?> <resources> <color name=&q ...

随机推荐

  1. js中style,currentStyle和getComputedStyle的区别以及获取css样式操作方法

    用js的style只能获取元素的内联样式,内部样式和外部样式使用style是获取不到的. currentStyle可以弥补style的不足(可获取内联样式,内部样式和外部样式),但是只适用于IE. g ...

  2. 死锁问题分析(个人认为重点讲到了gap间隙锁,解决了我一些不明报死锁的问题)

    线上某服务时不时报出如下异常(大约一天二十多次):“Deadlock found when trying to get lock;”. Oh, My God! 是死锁问题.尽管报错不多,对性能目前看来 ...

  3. LR运行负载测试场景-笔记

    控制虚拟用户的行为:通用如图方式 查看用户的运行信息 在控制器释放前释放集合点用户 记录运行时注释---scenario-execution notes Vuser 对话框:初始化.运行.停止运行用户 ...

  4. 深度学习 weight initialization

    转自: https://www.leiphone.com/news/201703/3qMp45aQtbxTdzmK.htmla https://blog.csdn.net/shuzfan/articl ...

  5. 微软已发布 Windows 10 Timeline 功能的官方 Chrome 插件

    微软已发布 Windows 10 Timeline 功能的官方 Chrome 插件,这个插件名为 Web Activities,功能是跨 Windows 10 和 Microsoft Launcher ...

  6. ubuntu系统安装mysql(deb-bundle包)

    由于某些原因,又要在ubuntu系统中安装mysql了,之前曾经安装过好多次.都没记下来 以前一直动用源码包来安装,基于两个原因:1.一直用Python写代码.2.想使用文件来安装,而不是通过api ...

  7. 关于jQuery.when()用法

    1.该方法在jQuery1.5开始被引入. 2.用法测试 a. var url1 = "/resource/ar/hometab/index_tab_games.json", ur ...

  8. HTML条件注释

    前面的话 IE条件注释是微软从IE5开始就提供的一种非标准逻辑语句,作用是可以灵活的为不同IE版本浏览器导入不同html元素.很显然这种方法的最大好处就在于属于微软官方给出的兼容解决办法而且还能通过W ...

  9. MD5进行解密操作

    package com.dyy.test; import java.security.MessageDigest; public class TestMD5Util { /*** * MD5加码 生成 ...

  10. 洛谷P1038神经网络题解

    题目 这个题不得不说是一道大坑题,为什么这么说呢,这题目不仅难懂,还非常适合那种被生物奥赛刷下来而来到信息奥赛的学生. 因此我们先分析一下题目的坑点. 1: 题目的图分为输入层,输出层,以及中间层. ...