题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5517

-------------------------------------------------------------------------------------------------------

前置知识以及思维难度上不算很高 不过实现对于我这种弱渣来说还是太复杂了(很多处理比较绕)

我们稍作分析(xiangyun)后可以发现 有可能最优且本质不同的三元组C只有不超过M个

对于二元组A b相同时只用保留a最大的 并且把相同的A合并掉

处理完之后再将B与之合体 得到不超过M个C

此时先按一个元素排序 再根据另两个元素值 用二维树状数组统计下就好了

-------------------------------------------------------------------------------------------------------

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + , lim = ;
int t, n, m, len, lenm;
struct sa
{
int x,y,c;
}a[N],ua[N];
struct sc
{
int x,y,z,c;
}c[N];
bool f[lim][lim];
bool cmp1(const sa &aa,const sa &bb)
{
return aa.y < bb.y || (aa.y == bb.y && aa.x > bb.x);
}
bool cmp2(const sc &aa,const sc &bb)
{
return aa.x > bb.x || (aa.x == bb.x && aa.y < bb.y)
|| (aa.x == bb.x && aa.y == bb.y && aa.z < bb.z);
}
int main()
{
scanf("%d", &t);
for(int ca = ; ca <= t; ++ca)
{
scanf("%d%d", &n, &m);
for(int i = ; i <= n; ++i)
scanf("%d%d", &a[i].x, &a[i].y);
sort(a + , a + + n, cmp1);
len = lenm = ;
memset(ua, , sizeof ua);
for(int i = ; i <=n;)
{
++len;
ua[len].x = a[i].x;
ua[len].y = a[i].y;
int j = i;
while(a[j + ].x == a[i].x)
++j;
ua[len].c = j - i + ;
while(a[j]. y == a[i].y)
++j;
i = j;
}
int tx,ty,tz;
for(int i = ; i <= m; ++i)
{
scanf("%d%d%d", &tx, &ty, &tz);
int L = , R = len, mid;
while(L < R)
{
mid = (L + R) >> ;
if(ua[mid].y >= tz)
R = mid;
else
L = mid + ;
}
if(ua[R].y == tz)
{
++lenm;
c[lenm].x = ua[R].x;
c[lenm].y = lim - tx;
c[lenm].z = lim - ty;
c[lenm].c = ua[R].c;
}
}
n = lenm;
sort(c + ,c + + n,cmp2);
memset(f, , sizeof f);
long long ans = ;
for(int i = ; i <= n; ++i)
{
if(c[i].x == c[i + ].x && c[i].y == c[i + ].y &&
c[i].z == c[i + ].z)
{
c[i + ].c += c[i].c;
continue;
}
bool tmp = ;
for(int p = c[i].y; p ; p -= p & -p)
for(int q = c[i].z; q; q -= q & -q)
tmp |= f[p][q];
if(!tmp)
ans += c[i].c;
for(int p = c[i].y; p < lim; p += p & -p)
for(int q = c[i].z; q < lim; q += q & -q)
f[p][q] = ;
}
printf("Case #%d: %lld\n", ca, ans);
}
return ;
}

hdu 5517 Triple的更多相关文章

  1. hdu 5517 Triple(二维树状数组)

    Triple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  2. ACM-ICPC 2015 沈阳赛区现场赛 I. Triple && HDU 5517(二维BIT)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5517 题意:有二元组(a,b),三元组(c,d,e).当b == e时它们能构成(a,c,d)然后,当 ...

  3. HDU 5517 【二维树状数组///三维偏序问题】

    题目链接:[http://acm.split.hdu.edu.cn/showproblem.php?pid=5517] 题意:定义multi_set A<a , d>,B<c , d ...

  4. hdu 3908 Triple(组合计数、容斥原理)

    Triple Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Total Su ...

  5. K-D树

    一般用来解决各种二维平面的点对统计,也许一般非正解? 没时间慢慢写了,打完这个赛季后补细节 建树板子: #include <cstdio> #include <locale> ...

  6. HDU 5902 GCD is Funny 数学

    GCD is Funny 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5902 Description Alex has invented a ne ...

  7. hdu 1150 Machine Schedule 最少点覆盖转化为最大匹配

    Machine Schedule Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  8. hdu 1370 Biorhythms

    中国剩余定理……. 链接http://acm.hdu.edu.cn/showproblem.php?pid=1370 /**************************************** ...

  9. 【中国剩余定理】POJ 1006 & HDU 1370 Biorhythms

    题目链接: http://poj.org/problem?id=1006 http://acm.hdu.edu.cn/showproblem.php?pid=1370 题目大意: (X+d)%23=a ...

随机推荐

  1. [LeetCode] 461. Hamming Distance(位操作)

    传送门 Description The Hamming distance between two integers is the number of positions at which the co ...

  2. CSS中设置字体样式

    <style type="text/css"> body{ font-family: SimHei,"微软雅黑",sans-serif; } < ...

  3. msyql join语句执行原理

    首先,我建了一个表t2,里面有1000条数据,有id,a,b三个字段,a字段加了索引 然后我又建立一个t1表,里面有100条数据,和t2表的前一百条数据一致,也是只有id,a,b三个字段,a字段加了索 ...

  4. No-sql之redis常用命令

    转自:http://blog.csdn.net/nicewuranran/article/details/51793760 No-SQL之Redis 介绍 Redis是一种基于内存存储的key-val ...

  5. P3806 【模板】点分治1(题解)(点分治)

    P3806 [模板]点分治1(题解)(点分治) 洛谷题目传送门 #include<iostream> #include<cstdlib> #include<cstdio& ...

  6. 12、numpy——数学函数

    NumPy 数学函数 NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等. 1.三角函数 NumPy 提供了标准的三角函数:sin().cos().tan(). i ...

  7. FZU 2187 回家种地 ( 扫描线 + 离散 求矩阵单次覆盖面积 )

    2187 回家种地 Accept: 56    Submit: 230Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Descript ...

  8. Qt 如何使用反射?

    Qt 如何使用反射? c++ 反射 标准库暂时还没有,那我们来看看如何使用 qt 来进行反射. 反射类的案例 1. 通过注册的类型需找 id 进行实例化该类 myclass.h #include &l ...

  9. 根据select选择来控div是否显示,默认这个div是隐藏的,

    <!DOCTYPE html><html><head lang="cn"><title>Insert title here</ ...

  10. 前端对base64编码的理解,原生js实现字符base64编码

    目录 常见对base64的认知(不完全正确) 多问一个为什么,base64到底是个啥? 按照我们的思路实现一下 到这里基本就实现了,结果跟原生的方法打印的是一样的 下一次 @( 对于前端工程师来说ba ...