BZOJ4548 小奇的糖果
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作。
本文作者:ljh2000
作者博客:http://www.cnblogs.com/ljh2000-jump/
转载请注明出处,侵权必究,保留最终解释权!
Description
有 N 个彩色糖果在平面上。小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果。求出最多能够拾
Input
包含多组测试数据,第一行输入一个正整数 T 表示测试数据组数。
Output
对于每组数据在一行内输出一个非负整数 ans,表示答案
Sample Input
10 3
1 2 3
2 1 1
2 4 2
3 5 3
4 4 2
5 1 2
6 3 1
6 7 1
7 2 3
9 4 2
Sample Output
//It is made by ljh2000
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <ctime>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <string>
using namespace std;
typedef long long LL;
const int MAXN = 100011;
int n,C[MAXN],L,k,yan[MAXN],ans,X[MAXN];
int last[MAXN],next[MAXN],c[MAXN];
struct node{int x,y,col,pos;}a[MAXN];
inline bool cmpx(node q,node qq){ if(q.x==qq.x) return q.y>qq.y; return q.x<qq.x; }
inline bool cmpy(node q,node qq){ return q.y<qq.y; }
inline void add(int x,int val){ while(x<=L) c[x]+=val,x+=x&(-x); }
inline int query(int x){ if(x==0) return 0; int tot=0; while(x>0) tot+=c[x],x-=x&(-x); return tot; }
inline void update(int l,int r){ if(l>r) return ; int tot=query(r)-query(l-1); if(tot>ans) ans=tot; }
inline int getint(){
int w=0,q=0; char c=getchar(); while((c<'0'||c>'9') && c!='-') c=getchar();
if(c=='-') q=1,c=getchar(); while (c>='0'&&c<='9') w=w*10+c-'0',c=getchar(); return q?-w:w;
} inline void solve(){
X[0]=0; X[n+1]=L; memset(last,0,sizeof(last)); memset(next,0,sizeof(next)); memset(yan,0,sizeof(yan));
for(int i=1;i<=n;i++) add(a[i].x,1); sort(a+1,a+n+1,cmpx);
for(int i=1;i<=n;i++) {
last[a[i].pos]=yan[a[i].col]; next[a[i].pos]=n+1;
if(yan[a[i].col]) next[yan[a[i].col]]=a[i].pos;
update(X[yan[a[i].col]]+1,X[a[i].pos]-1);
yan[a[i].col]=a[i].pos;
}
for(int i=1;i<=k;i++) update(X[yan[i]]+1/*!!!*/,L);
sort(a+1,a+n+1,cmpy);
for(int i=1,head=1;i<=n;i=head) {
while(head<=n && a[head].y==a[i].y) {
add(a[head].x,-1);
head++;
}
for(int j=i;j<head;j++) {
update(X[last[a[j].pos]]+1,X[next[a[j].pos]]-1);
next[last[a[j].pos]]=next[a[j].pos];
last[next[a[j].pos]]=last[a[j].pos];
}
}
} inline void work(){
int T=getint();
while(T--) {
n=getint(); k=getint(); ans=0; L=0; for(int i=1;i<=n;i++) a[i].x=getint(),a[i].y=getint(),a[i].col=getint(),C[i]=a[i].x,a[i].pos=i;
sort(C+1,C+n+1); L=unique(C+1,C+n+1)-C-1; for(int i=1;i<=n;i++) a[i].x=lower_bound(C+1,C+L+1,a[i].x)-C,X[i]=a[i].x; L++;
solve(); for(int i=1;i<=n;i++) a[i].y=-a[i].y; solve();
printf("%d\n",ans);
}
} int main()
{
work();
return 0;
}
BZOJ4548 小奇的糖果的更多相关文章
- 【题解】BZOJ4548 小奇的糖果(树状数组)
[题解]BZOJ4548 小奇的糖果(树状数组) 说在前面:我有个同学叫小奇,他有一个朋友叫达达,达达特爱地理和旅游,初中经常AK地理,好怀恋和他已经达达一起到当时初中附近许多楼盘的顶楼逛的时光... ...
- Bzoj4548 小奇的糖果(链表+树状数组)
题面 Bzoj 题解 很显然,我们只需要考虑单独取线段上方的情况,对于下方的把坐标取反再做一遍即可(因为我们只关心最终的答案) 建立树状数组维护一个横坐标区间内有多少个点,维护双向链表实现查询一个点左 ...
- 【题解】 BZOJ4548 小奇的糖果
本文同步在学弟ZCDHJ的个人博客发布,审核需要一段时间. 传送门 考虑题目中获得的糖果并不包含所有的颜色这句话,发现相当于我们可以直接选取某一个颜色强制不能选(这样子一定最优). 然后就可以考虑分开 ...
- bzoj4548: 小奇的糖果 题解
题目链接 题解 不包含所有颜色 就强制不选一个颜色 图中圆点颜色相同 矩形越大,包括的点一定不比其一小部分少 如图所示,最大矩形只有3种 离散化\(x\)坐标 然后按\(y\)排序 每次取出颜色的前驱 ...
- 【BZOJ4548】小奇的糖果 set(链表)+树状数组
[BZOJ4548]小奇的糖果 Description 有 N 个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能够拾起多少糖果,使得获得的糖果并不包含所有的 ...
- 【BZOJ-4548&3658】小奇的糖果&Jabberwocky 双向链表 + 树状数组
4548: 小奇的糖果 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 103 Solved: 47[Submit][Status][Discuss] ...
- 【BZOJ4548】小奇的糖果
→原题传送门←(by Hzwer) 「题目背景」 小奇不小心让糖果散落到了地上,它对着满地的彩色糖果胡思乱想. 「问题描述」 有 N 个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或 ...
- 小奇的糖果(candy)
[题目背景]小奇不小心让糖果散落到了地上,它对着满地的彩色糖果胡思乱想.[问题描述]有 N 个彩色糖果在平面上. 小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能够拾起多少糖果 ...
- 【bzoj4548】小奇的糖果 STL-set+树状数组
题目描述 平面上有n个点,每个点有一种颜色.对于某一条线段,选择所有其上方或下方的点.求:在不包含所有颜色的点的前提下,选择的点数最多是多少.(本题中如果存在某颜色没有相应的点,那么选择任何线段都不算 ...
随机推荐
- Openjudge 1.3-04 垂直直方图
04:垂直直方图 查看 总时间限制: 1000ms 内存限制: 65536kB 描述 输入4行全部由大写字母组成的文本,输出一个垂直直方图,给出每个字符出现的次数.注意:只用输出字符的出现次数,不用输 ...
- BZOJ 1082 【SCOI2005】 栅栏
Description 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木 ...
- QT TCP文件上传服务器
利用QT做为client端,纯C语言做为server端,利用tcp协议,实现client端向server端传递文件 Linux服务器端 //头文件 #include <stdio.h> # ...
- scala 学习笔记(01) 函数定义、分支、循环、异常处理、递归
package yjmyzz import scala.io.StdIn object ScalaApp { def main(args: Array[String]) { println(" ...
- [JAVA教程] 2016年最新spring4框架搭建视频教程 【尚学堂】
Spring4框架 主讲:邹波 类型:SSH 适合对象:学习完javase.数据库技术.jdbc者 Spring4.0作为一个广泛使用的开源框架,它由Rod Johnson创建.它是为了解决企业应用开 ...
- BatsingJSLib 2.3、Ajax上传多个文件
//2.3Ajax上传单个或多个文件 //<input type="file" multiple="multiple"/> //参数:文件的表单JD ...
- 自己留存:小经验在asp.net 4.5或者asp.net mvc 5解决A potentially dangerous Request.Form value was detected from the client
以前的解决办法是 <configuration> <system.web> <pages validateRequest="false&q ...
- IIS W3SVC 无法启动1068错误的解决
苦苦寻找解决方法多天之后,终于看到了最简单的处理方法. 故障: 试遍网上各种方法,司马当活马,CMD下输入如下命令,然后重启: fsutil resource setautoreset true C: ...
- [BZOJ1193][HNOI2006]马步距离(贪心+dfs)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1193 分析: 首先小范围可以直接暴力.(其实只要用上题目中的表就行了) 如果范围比较大 ...
- bindService初步了解
bindService的使用: 当需要调Service里面的方法时,可以用bindService() 首先定义一个类继承于Service,然后配置Manifest.xml文件 public class ...