传送门

memset0好评

解题思路

比较恶心的一道数据结构题

看一眼题面,马上想到离散化。

然后将一维排序,另一维用树状数组或者线段树维护。

然后就没思路了

发现一个性质:

不包含所有的颜色,当然要使得只有一种不被选的颜色。

那么我们可以对每一种颜色开一个 \(\text{set}\) ,这样就可以比较方便地找到,某个时刻一种颜色的覆盖范围。

对于向上和向下,只要跑正反两边就好了。

细节注意事项

  • 咕咕咕

参考代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <ctime>
#include <set>
#define rg register
using namespace std;
template < typename T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while (!isdigit(c)) f |= (c == '-'), c = getchar();
while (isdigit(c)) s = s * 10 + (c ^ 48), c = getchar();
s = f ? -s : s;
} const int _ = 100010; int t[_];
set < int > s[_];
set < int > ::iterator it;
int n, m, ans, X[_]; struct node{ int x, y, z; }p[_]; inline bool cmp(const node& a, const node& b) { return a.y < b.y; } inline int lb(int x) { return x & -x; } inline void update(int x) { for (rg int i = x; i <= n; i += lb(i)) ++t[i]; } inline int query(int x) { int res = 0; for (rg int i = x; i >= 1; i -= lb(i)) res += t[i]; return res; } inline void solve() {
memset(t, 0, sizeof t);
for (rg int i = 1; i <= m; ++i) s[i].clear(), s[i].insert(0), s[i].insert(n + 1);
for (rg int i = 1, j = 1; i <= n; i = j) {
while (j <= n && p[i].y == p[j].y) ++j;
for (rg int k = i; k < j; ++k) {
int r = *s[p[k].z].lower_bound(p[k].x) - 1;
int l = *--s[p[k].z].upper_bound(p[k].x);
ans = max(ans, query(r) - query(l));
}
for (rg int k = i; k < j; ++k) update(p[k].x), s[p[k].z].insert(p[k].x);
}
for (rg int x, i = 1; i <= m; ++i)
for (it = s[i].begin(); it != s[i].end(); )
x = *it, ans = max(ans, query(*++it - 1) - query(x));
} int main() {
#ifndef ONLINE_JUDGE
freopen("in.in", "r", stdin);
#endif
int T; read(T);
while (T--) {
read(n), read(m);
for (rg int i = 1; i <= n; ++i)
read(p[i].x), read(p[i].y), read(p[i].z), X[i] = p[i].x;
sort(X + 1, X + n + 1), sort(p + 1, p + n + 1, cmp);
for (rg int i = 1; i <= n; ++i)
p[i].x = lower_bound(X + 1, X + n + 1, p[i].x) - X;
ans = 0;
solve(), reverse(p + 1, p + n + 1), solve();
printf("%d\n", ans);
}
return 0;
}

完结撒花 \(qwq\)

「BZOJ4548」小奇的糖果的更多相关文章

  1. 【BZOJ4548】小奇的糖果 set(链表)+树状数组

    [BZOJ4548]小奇的糖果 Description 有 N 个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能够拾起多少糖果,使得获得的糖果并不包含所有的 ...

  2. 【BZOJ4548】小奇的糖果

    →原题传送门←(by Hzwer) 「题目背景」 小奇不小心让糖果散落到了地上,它对着满地的彩色糖果胡思乱想. 「问题描述」 有 N 个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或 ...

  3. 【bzoj4548】小奇的糖果 STL-set+树状数组

    题目描述 平面上有n个点,每个点有一种颜色.对于某一条线段,选择所有其上方或下方的点.求:在不包含所有颜色的点的前提下,选择的点数最多是多少.(本题中如果存在某颜色没有相应的点,那么选择任何线段都不算 ...

  4. 【题解】BZOJ4548 小奇的糖果(树状数组)

    [题解]BZOJ4548 小奇的糖果(树状数组) 说在前面:我有个同学叫小奇,他有一个朋友叫达达,达达特爱地理和旅游,初中经常AK地理,好怀恋和他已经达达一起到当时初中附近许多楼盘的顶楼逛的时光... ...

  5. 【BZOJ-4548&3658】小奇的糖果&Jabberwocky 双向链表 + 树状数组

    4548: 小奇的糖果 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 103  Solved: 47[Submit][Status][Discuss] ...

  6. 「NOI2013」小 Q 的修炼 解题报告

    「NOI2013」小 Q 的修炼 第一次完整的做出一个提答,花了半个晚上+一个上午+半个下午 总体来说太慢了 对于此题,我认为的难点是观察数据并猜测性质和读入操作 我隔一会就思考这个sb字符串读起来怎 ...

  7. 「SCOI2015」小凸想跑步 解题报告

    「SCOI2015」小凸想跑步 最开始以为和多边形的重心有关,后来发现多边形的重心没啥好玩的性质 实际上你把面积小于的不等式列出来,发现是一次的,那么就可以半平面交了 Code: #include & ...

  8. 「SCOI2015」小凸解密码 解题报告

    「SCOI2015」小凸解密码 题意:给一个环,定义一段连续的极长\(0\)串为\(0\)区间,定义一个位置的离一个\(0\)区间的距离为这个位置离这个区间中\(0\)的距离的最小值,每次询问一个位置 ...

  9. 「SCOI2015」小凸玩矩阵 解题报告

    「SCOI2015」小凸玩矩阵 我好沙茶啊 把点当边连接行和列,在外面二分答案跑图的匹配就行了 我最开始二分方向搞反了,样例没过. 脑袋一抽,这绝壁要费用流,连忙打了个KM 然后wa了,一想这个不是完 ...

随机推荐

  1. Java-POJ1005-I Think I Need a Houseboat

    盗用的翻译,哈哈哈!白嫖就完事了. 题目: 密西西比河岸某处陆地因为河水侵蚀,每年陆地面积都在减少,每年减少50平方英里,减少的陆地面积呈半圆形,即该半圆形面积以每年50平方英里的速度增长.在第一年初 ...

  2. HttpRunner接口自动化框架的使用

    简介: HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求. HttpRu ...

  3. PHP Apache/Nginx/IIS等各环境下的伪静态配置

    一.Apache的伪静态配置 1.网站根目录下需要有 .htaccess 文件,没有则自己创建一个,内容如下: <IfModule mod_rewrite.c> RewriteEngine ...

  4. pip知识点

    pip第三方模块保存在\Lib\site-packages目录 安装第三方模块:\Script目录下->shift+鼠标右点打开powershift窗口 ->pip install 模块名 ...

  5. Java传(1)

    ____________________________去告诉世界,我已经横空出世了! 你好丫,世界! public class HelloWorld{ public static void main ...

  6. STA之RC Corner拾遗

    Q:还有一种RC corner 带后缀『_T』,只用于setup signoff,T指的是什么? A:T代表tighten,在rc的variation上的sigma分布比不带T的更紧,因此只能用于se ...

  7. JavaScript.Array.some() 方法用法

    定义和用法:some() 方法用于检测数组中的元素是否满足指定条件(函数提供). some() 方法会依次执行数组的每个元素: 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检 ...

  8. win api + ffmpeg 播放 mp3 音乐

    暂时记录,还有很多需要改善的地方一直没弄好,比如不知道怎么对上正确的播放速度. 有一些多余的代码,不用在意. #include <iostream> #include <fstrea ...

  9. 【转载】Java泛型(二)

    转自:http://www.cnblogs.com/lwbqqyumidi/p/3837629.html 一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public ...

  10. python中pip问题

    1.在cmd中运行pip命令显示‘pip命令显示不是内部或外部命令,也不是可运行的程序或批处理文件’的问题 先看python的安装目录下Script文件夹中pip3.exe有没有缺失 如果没有在cmd ...