题目链接 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. [Codeforces 464E] The Classic Problem(可持久化线段树)

    [Codeforces 464E] The Classic Problem(可持久化线段树) 题面 给出一个带权无向图,每条边的边权是\(2^{x_i}(x_i<10^5)\),求s到t的最短路 ...

  2. [BZOJ3932][CQOI2015]任务查询系统(差分+主席树)

    题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那 ...

  3. Codeforces 1061C (DP+滚动数组)

    题面 传送门 分析 考虑DP 设\(dp[i][j]\)表示前i个数选出的序列长度为j的方案数 状态转移方程为: \[ dp[i][j]= \begin{cases}dp\left[ i-1\righ ...

  4. jxl读取excel浮点数据时,小数点后三位截取问题

    今天导入Excel数据时,发现很多浮点数据被自动四舍五入只保留了三位,原来是jxl里对getContents()进行了封装,对数值型数据作了该处理.一般我们会对读取excel的一整套流程作为工具类,那 ...

  5. Spring Boot 项目 Maven 配置

    在配置基于Maven的Spring Boot项目的过程中,打包运行出现了一系列错误. 比如: mvn 中没有主清单属性.java.lang.NoClassDefFoundError: org/spri ...

  6. URAL - 1486 二维字符串HASH

    题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1486 题意:给定一个n*m的字符矩阵,问你是否存在两个不重合(可以有交集)的正方形矩阵完 ...

  7. matplot绘图无法显示中文的问题

    手动添加: from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体 mpl.rcParams['axes.un ...

  8. Sass-数字运算

    在 Sass 运算中数字运算是较为常见的,数字运算包括前面介绍的:加法.减法.乘法和除法等运算.而且还可以通过括号来修改他们的运算先后顺序.和我们数学运算是一样的,一起来看个示例. .box { wi ...

  9. PyQt5界面上调用subprocess.Popen会闪命令窗口的问题

    最近再做一个界面开发,主要实现的点击一个按钮,会执行adb安装应用程序的功能,在调试阶段一切都正常,但打包成一个exe安装程序,安装之后运行,点击按钮会闪一下adb的命令窗口 先列出subproces ...

  10. 【转】SAP 各种记账凭证的更改&冲销

    一:更改 1,已经过帐的 FB02. 过完帐的允许更改的地方有限,只有凭证抬头文本,参照,分配,文本,原因代码等 2,预制凭证的更改. FBV2. 预制凭证可以更改的地方很多,只有凭证编码+公司代码+ ...