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

说在前面:我有个同学叫小奇,他有一个朋友叫达达,达达特爱地理和旅游,初中经常AK地理,好怀恋和他已经达达一起到当时初中附近许多楼盘的顶楼逛的时光...

主要是今天大家讲题的时候我偷偷溜出来到了科技楼七楼,从窗户爬到阳台上,发现顶楼居然有:

  • 天文望远镜一台
  • 气象观测室一间
  • 化学实验室一间
  • 水文实验室一间
  • Corridors一个
  • 奇怪的植物若干
  • 没有监控

考虑到要求至少没有一种颜色,那么就钦定某种颜色不存在即可

考虑这样一种做法,将所有点按照y从小往大排序,枚举到\(u=(x,y,z)\)时,查询y比他小的\(z\)颜色的点的位置,定位到在\(u\)两侧的点然后查询在\(u\)以下的点的个数,此时由于一定没有\(z\)颜色,所以是合法的。

然后那些一条线往上的方案,可以把y*=-1解决

//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>
#define DEBUG(s) cerr<<(#s)<<" = "<<(s)<<endl
#define getchar() (__c==__ed?(__ed=__buf+fread(__c=__buf,1,1<<18,stdin),*__c++):*__c++) using namespace std; typedef long long ll; char __buf[1<<18],*__c=__buf,*__ed=__buf;
inline int qr(){
register int ret=0,f=0;
register char c=getchar();
while(!isdigit(c))f|=c==45,c=getchar();
while(isdigit(c)) ret=ret*10+c-48,c=getchar();
return f?-ret:ret;
}
const int maxn=1e5+7;
const int inf=1<<30;
struct NODE{
int x,y,z;
inline bool operator <(const NODE&A)const{return y<A.y;}
}data[maxn];
int n,k,len;
int sav[maxn];
set<int> s[maxn];
int seg[maxn]; inline void add(const int&pos,const int&tag){
for(int t=pos;t<=len;t+=t&-t) seg[t]+=tag;
} inline int que(const int&pos){
int ret=0;
for(int t=pos;t>0;t-=t&-t) ret+=seg[t];
return ret;
} int work(const int&_f){
int ret=0;
for(int t=1;t<=n&&_f;++t) data[t].x=qr(),data[t].y=qr(),data[t].z=qr();
memset(seg,0,sizeof seg);
for(int t=1;t<=n;++t) sav[t]=data[t].x;
sav[n+1]=inf; sav[n+2]=-inf;
sort(sav+1,sav+n+2+1);
len=unique(sav+1,sav+n+2+1)-sav-1;
for(int t=1;t<=n;++t) data[t].x=lower_bound(sav+1,sav+len+1,data[t].x)-sav;
sort(data+1,data+n+1);
for(int t=1;t<=k;++t) s[t].clear(),s[t].insert(1),s[t].insert(len);
for(int t=1;t<=n;++t){
if(s[data[t].z].find(data[t].x)==s[data[t].z].end()){
ret=max(ret,que(*s[data[t].z].upper_bound(data[t].x)-1)-que(*--s[data[t].z].upper_bound(data[t].x)));
s[data[t].z].insert(data[t].x);
}
add(data[t].x,1);
}
for(int t=1;t<=k;++t){
int last=1;
for(set<int>::iterator i=s[t].upper_bound(1);i!=s[t].end();++i)
ret=max(ret,que(*i-1)-que(last)),last=*i;
}
if(_f){
for(int t=1;t<=n;++t) data[t].y=-data[t].y;
ret=max(ret,work(0));
}
return ret;
} int main(){
#ifndef ONLINE_JUDGE
freopen("cpp.in","r",stdin);
freopen("cpp.out","w",stdout);
#endif
int T=qr();
while(T--) n=qr(),k=qr(),printf("%d\n",work(1));
return 0;
}

【题解】BZOJ4548 小奇的糖果(树状数组)的更多相关文章

  1. Bzoj4548 小奇的糖果(链表+树状数组)

    题面 Bzoj 题解 很显然,我们只需要考虑单独取线段上方的情况,对于下方的把坐标取反再做一遍即可(因为我们只关心最终的答案) 建立树状数组维护一个横坐标区间内有多少个点,维护双向链表实现查询一个点左 ...

  2. 【题解】 BZOJ4548 小奇的糖果

    本文同步在学弟ZCDHJ的个人博客发布,审核需要一段时间. 传送门 考虑题目中获得的糖果并不包含所有的颜色这句话,发现相当于我们可以直接选取某一个颜色强制不能选(这样子一定最优). 然后就可以考虑分开 ...

  3. BZOJ4548 小奇的糖果

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  4. BZOJ 3192: [JLOI2013]删除物品 奇淫技巧&树状数组

    点我看题 这题十分奇淫技巧...QAQ因为知道是树状数组的题QAQ刚开始以为维护两个数组的树状数组然后模拟从大到小,然后发现不会打QAQ 于是悄悄咪咪翻开题解了. 实际上两个数组可以看做一个数组 如 ...

  5. 题解 P3374 【【模板】树状数组 1】

    恩,这是AC的第一道树状数组呢. 本蒟蒻以前遇到RMQ问题一般都用线段树或ST表,可惜ST表不支持在线修改,而线段树代码量又太大. 如今终于找到了折中方案:树状数组!!!!代码量小,还支持修改! 树状 ...

  6. bzoj4548: 小奇的糖果 题解

    题目链接 题解 不包含所有颜色 就强制不选一个颜色 图中圆点颜色相同 矩形越大,包括的点一定不比其一小部分少 如图所示,最大矩形只有3种 离散化\(x\)坐标 然后按\(y\)排序 每次取出颜色的前驱 ...

  7. POJ3928 Pingpong(统计比 K 小的个数 + 树状数组)

    Ping pong Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2691   Accepted: 996 Descript ...

  8. HDU 4638 Group 【树状数组,分块乱搞(莫队算法?)】

    根据题目意思,很容易得出,一个区间里面连续的段数即为最少的group数. 题解上面给的是用树状数组维护的. 询问一个区间的时候,可以一个一个的向里面添加,只需要判断a[i]-1 和 a[i]+1是否已 ...

  9. 权值树状数组 HDU-2852 KiKi's K-Number

    引入 权值树状数组就是数组下标是数值的数组,数组存储下标对应的值有几个数 题目 HDU-2852 KiKi's K-Number 题意 几种操作,p=0代表push:将数值为a的数压入盒子 p=1代表 ...

随机推荐

  1. 错误处理——According to TLD or attribute directive in tag file, attribute test does not accept any expres

    应用部署运行的时候出现JSP异常, 发生在使用JSTL库的时候: According to TLD or attribute directive in tag file, attribute valu ...

  2. 威胁快报|新兴挖矿团伙借助shodan作恶,非web应用安全再鸣警钟

    近日,阿里云安全发现了一个使用未授权访问漏洞部署恶意Docker镜像进行挖矿的僵尸网络团伙.我们给这一团伙取名为Xulu,因为该团伙使用这个字符串作为挖矿时的用户名. Xulu并不是第一个攻击Dock ...

  3. 可运行的js代码

    canrun <html> <head> <title>测试博客园HTML源码运行程序</title> <meta http-equiv=&quo ...

  4. windows 关闭端口被占用脚本

    cmd 关闭进程java taskkill /F /IM java.exe taskkill /f /im java.exe 如何用dat批处理文件关闭某端口对应程序-Windows自动化命令 如何用 ...

  5. ip2long与long2IP 分析

    <?php $ip='47.93.97.127'; $long=sprintf("%u",ip2long($ip));//string(9) "794648959& ...

  6. 【原生JS】制作网页头部刷新进度条

    之前的某次番啬看到油管上有这么一个进度条,当时觉得挺好玩,一直想着做一个试试,刚才弄了一下写了一个不算太好看的简陋版本,哈哈. (本博客刷新会头部会出现,因为并没有真正的参与到浏览器加载是否完整这个渲 ...

  7. vue iframe嵌套页面高度自适应 (ios 宽度扩大的bug , ios展示比例问题)

    <template>   <div class="card-index pt-relative">     <div id="wrapper ...

  8. Python--day67--Django的路由系统

    原文:https://www.cnblogs.com/liwenzhou/articles/8271147.html Django的路由系统 Django 1.11版本 URLConf官方文档 URL ...

  9. 2018-8-10-git-提交添加-emoij-文字

    title author date CreateTime categories git 提交添加 emoij 文字 lindexi 2018-08-10 19:16:52 +0800 2018-2-1 ...

  10. Cookie内不能直接存入中文,cookie转码以及解码

    如果在cookie中存入中文,极易出现问题. js在存入cookie时,利用escape() 函数可对字符串进行编码, 用unescape()进行解码 顺序是先把cookie用escape()函数编码 ...