hdu 6183
给出二维平面
$opt1.$ 对点 $(x, y)$ 增减颜色 $c$,
$opt2.$ 询问矩形 $(1, y_1), (x, y_2)$ 内出现过的颜色种数
$x, y <= 1e6, c <= 50$
二维线段树 $hehe$
观察特殊性质每次询问的矩形的左上(下)角都在直线 $x = 1$ 上
假设只有一种颜色
如下平面直角坐标系

这张图貌似并没有什么用
给出黑色点为插入的点
询问绿色矩形内的颜色种数
因为假设只有 $1$ 种颜色
所以只需判断绿色矩形内是否存在插入的点
显然是存在的
Sol
每次插入一个点 $(x, y)$,把 $x$ 当做 $y$ 的权值,线段树维护每个 $y$ 的最小值
即线段树以纵坐标 $y$ 为下标,维护每个数的最小值
相当于单点修改 $y$ 的值为 $min(w_y, x)$
这也就是询问的矩形左上(下)点的特殊性质所在
这样的话
对每个颜色开一颗线段树(动态开点)
每次查询,枚举颜色,线段树查询区间 $(y_1, y_2)$ 内的最小值 $Min$
如果 $Min <= $ 右上(下)点的横坐标则对答案贡献为 $1$
时间复杂度 $O(50nlogn)$
注意:线段树在查询时,如果当前最小值已经 $<=$ 查询的 $x$ 时,不再进行递归
否则会 $TLE$,可能下面的code写都丑
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std;
const int N = 1e6 + ; #define gc getchar()
inline int read() {
int x = ; char c = gc;
while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x;
}
#undef gc int Root[], Lson[N * ], Rson[N * ], Minx[N * ];
int js_root; void Clear() {
js_root = ;
memset(Root, , sizeof Root);
memset(Lson, , sizeof Lson);
memset(Rson, , sizeof Rson);
memset(Minx, 0x3f, sizeof Minx);
} void Poi_G(int l, int r, int &jd, int x, int num) {
if(!jd) jd = ++ js_root;
Minx[jd] = min(Minx[jd], num);
if(l == r) return ;
int mid = (l + r) >> ;
if(x <= mid) Poi_G(l, mid, Lson[jd], x, num);
else Poi_G(mid + , r, Rson[jd], x, num);
} int Ans; void Sec_A(int l, int r, int jd, int x, int y, int imp) {
if(!jd || Ans <= imp) return ;
if(x <= l && r <= y) {Ans = min(Ans, Minx[jd]); return ;}
if(l == r) return ;
int mid = (l + r) >> ;
if(x <= mid) Sec_A(l, mid, Lson[jd], x, y, imp);
if(y > mid) Sec_A(mid + , r, Rson[jd], x, y, imp);
} int main() {
int opt;
memset(Minx, 0x3f, sizeof Minx);
while(scanf("%d", &opt)) {
if(opt == ) break;
else if(opt == ) Clear();
else if(opt == ) {
int x = read(), y = read(), c = read();
Poi_G(, N - , Root[c], y, x);
} else {
int x = read(), y_1 = read(), y_2 = read(), Out_Ans();
if(y_1 > y_2) std:: swap(y_1, y_2);
for(int i = ; i <= ; i ++) {
Ans = Minx[N - ];
Sec_A(, N - , Root[i], y_1, y_2, x);
if(Ans <= x) Out_Ans ++;
}
printf("%d\n", Out_Ans);
}
}
return ;
}
hdu 6183的更多相关文章
- HDU 6183 Color it 线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6183 题意: 有四种操作: 0:清除所有点 1 x y c : 给点(x, y)添加一种颜色c(颜色不 ...
- HDU 6183 Color it(动态开点线段树)
题目原网址:http://acm.hdu.edu.cn/showproblem.php?pid=6183 题目中文翻译: Time Limit: 20000/10000 MS (Java/Others ...
- HDU - 6183 暴力,线段树动态开点,cdq分治
B - Color itHDU - 6183 题目大意:有三种操作,0是清空所有点,1是给点(x,y)涂上颜色c,2是查询满足1<=a<=x,y1<=b<=y2的(a,b)点一 ...
- hdu 6183 Color it (线段树 动态开点)
Do you like painting? Little D doesn't like painting, especially messy color paintings. Now Little B ...
- 【刷题】HDU 6183 Color it
Problem Description Do you like painting? Little D doesn't like painting, especially messy color pai ...
- HDU 6183 Color it
线段树. 假设只有一种颜色,因为每次询问有一个$x$一定是$1$,那么我可以想办法找出每一个$y$最小的$x$是多少,如果最小的都不符合,那么一定不符合,因为更新变成了单点更新,询问是区间询问最小值, ...
- HDU - 6183:Color it (线段树&动态开点||CDQ分治)
Do you like painting? Little D doesn't like painting, especially messy color paintings. Now Little B ...
- HDU - 6183 动态开点线段树 || 令人绝望的线段树
一看C才[0,50],肯定要开51棵线段树维护y区间的最小x值啦 是男人就上51棵..等等空间爆几倍了 动态开点!51棵线段树用全局节点变量控制,有点像主席树 清空工作很简单,把51个树根清掉然后回收 ...
- HDU 6183 Color it cdq分治 + 线段树 + 状态压缩
Color it Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Pro ...
随机推荐
- 从C++到Qt(舍弃IDE或qmake、cmake等工具的束缚,尝试通过几个例子)
Qt 是 C++ 的库,Qt 在 ansi C++ 的基础上进行了一点扩展. 但国内似乎比较浮躁,学Qt的很多连基本的C++如何编译似乎都不太清楚.本文舍弃IDE或qmake.cmake等工具的束缚, ...
- Java安装和环境配置
Java安装和环境配置 从事Java开发第一关就是安装JAVA环境. 我们要安装JDK, 全称Java开发全套. 其中包含了JRE(运行时环境), 如果你打游戏的时候可能会提示你缺少JRE. 我们要做 ...
- VSCode-设置webstorm的主题和快捷键
前提:VScode很火啊,理由:轻量,免费,不用找各种破解qi.... 好吧那我也从webstorm转过来试试,但是webstorm已经用了4年多了,对于一个有洁癖的人,必须把VScode打扮的和we ...
- oracle 的分页、截断查询
oracle 分页.截断查询 需求:从车管所的备案库中(oracle)取出数据,放到车综大数据平台(http方式) 现场情况:oracle中有三张表,CZRKXX(常住人口信息),ZDRYXX(重点人 ...
- python day3 int,str,list类型补充
目录 python day 3 1. int类小知识点 2. str类小知识点 3. list类小知识点 python day 3 (学习资料来自老男孩教育) 2019/10/06 1. int类小知 ...
- 本地数据存储解决方案以及cookie的坑
本地数据存储解决方案以及cookie的坑 问题: cookie过长导致页面打开失败 背景: 在公司的项目中有一个需求是打开多个工单即在同一个页面中打开了多个tab(iframe),但是需要在刷新时只刷 ...
- CSS和LESS
1.CSS 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS ...
- js中的BOM和DOM常用事件方法
笔记: window对象 ● window.innerHeight - 浏览器窗口的内部高度 ● window.innerWidth - 浏览器窗口的内部宽度 ● window.open() - 打开 ...
- Integer和int踩过的坑
在做SSM项目时发现一个有趣的bug,在这里记录一下. 数据库表如下: 实体类:grade字段初始设定为int类型 在用mybatis对第三条数据进行修改时,希望赋值的更改,未赋值的不更改,测试运行 ...
- shell 文本处理三剑客之 grep 和 egrep
shell 三剑客之 grep 命令语法格式 grep 参数 案例 显示file中有python的行 grep python file 显示没有python的行,不忽略大小写 grep -v pyth ...