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

题意:有二元组(a,b),三元组(c,d,e)。当b == e时它们能构成(a,c,d)然后,当不存在(u,v,w)!=(a,b,c)且u>=a,v>=b,w>=c时,则是一个better集合里的元素。问这个better集合有几个元素。

题解:当 c、d 相同时对于当前 e 只有 a 最大的时候才有可能是 better 集合里的元素,所以记录相同的 b 中 最大的 a 以及它出现的次数,然后可以生成一个新的三元组。将三元组排序并去重之后,从后往前更新二维树状数组即可统计答案。

 #include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mst(a,b) memset((a),(b),sizeof(a))
#define mp(a,b) make_pair(a,b)
#define pi acos(-1)
#define pii pair<int,int>
#define pb push_back
const int INF = 0x3f3f3f3f;
const double eps = 1e-;
const int MAXN = 1e5 + ;
const int MAXM = 1e3 + ; int bx[MAXN],cntb[MAXN]; struct node {
int a,c,d;
ll num;
bool operator == (const node &x) {
if(a == x.a && c == x.c && d == x.d) return true;
return false;
}
}p[MAXN]; bool cmp(node x,node y) {
if(x.a != y.a) return x.a < y.a;
else if(x.c != y.c) return x.c < y.c;
else if(x.d != y.d) return x.d < y.d;
return x.num < y.num;
} int lowbit(int x) {
return x & (-x);
} ll bit[MAXM][MAXM]; void update(int x,int y,ll val) {
for(int i = x; i <= ; i+= lowbit(i))
for(int j = y; j <= ; j += lowbit(j))
bit[i][j] += val;
} ll get(int x,int y) {
ll ans = ;
for(int i = x; i > ; i -= lowbit(i))
for(int j = y; j > ; j -= lowbit(j))
ans += bit[i][j];
return ans;
} ll query(int x1,int y1,int x2,int y2) {
return get(x2,y2) - get(x1 - ,y2) - get(x2, y1 - ) + get(x1 - , y1 - );
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
#endif
int cas = ;
int t;
scanf("%d", &t);
while(t--) {
mst(bx, );
mst(cntb, );
mst(bit, );
int n,m;
scanf("%d%d",&n,&m);
for(int i = ; i <= n; i++) {
int a,b;
scanf("%d%d",&a,&b);
if(a > bx[b]) bx[b] = a, cntb[b] = ;
else if(a == bx[b]) cntb[b]++;
}
for(int i = ; i <= m; i++) {
int c,d,e;
scanf("%d%d%d",&c,&d,&e);
p[i] = {bx[e],c,d,cntb[e]};
}
sort(p + , p + + m, cmp);
int tot = ;
for(int i = ; i <= m; i++) {
if(!p[i].num) continue;
if(p[i] == p[tot]) p[tot].num += p[i].num;
else p[++tot] = p[i];
}
ll ans = ;
for(int i = tot; i >= ; i--) {
if(!query(p[i].c,p[i].d,,)) ans += p[i].num;
update(p[i].c,p[i].d,p[i].num);
}
printf("Case #%d: %lld\n",cas++,ans);
}
return ;
}

ACM-ICPC 2015 沈阳赛区现场赛 I. Triple && HDU 5517(二维BIT)的更多相关文章

  1. ACM-ICPC 2015 沈阳赛区现场赛 F. Frogs && HDU 5514(容斥)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5514 题意:有m个石子围成一圈, 有n只青蛙从跳石子, 都从0号石子开始, 每只能越过xi个石子.问所 ...

  2. 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

    摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...

  3. HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)

    HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: ...

  4. ACM总结——2017ACM-ICPC北京赛区现场赛总结

    现在距离比赛结束已经过了一个多星期了,也是终于有时间写下心得了.回来就是被压着做项目,也是够够的. 这次比赛一样是我和两个学弟(虽然是学弟,但我的实力才是最弱的T_T)一起参加的,成绩的话打铁,算是情 ...

  5. Substrings 第37届ACM/ICPC 杭州赛区现场赛C题(hdu 4455)

    http://acm.hdu.edu.cn/showproblem.php?pid=4455 https://icpcarchive.ecs.baylor.edu/index.php?option=c ...

  6. ACM-ICPC 2016 沈阳赛区现场赛 I. The Elder && HDU 5956(斜率DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5956 题意:一颗树上每条边有个权值,每个节点都有新闻要送到根节点就是1节点,运送过程中如果不换青蛙就是 ...

  7. ACM-ICPC 2017 沈阳赛区现场赛 G. Infinite Fraction Path && HDU 6223(BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6223 参考题解:https://blog.csdn.net/qq_40482495/article/d ...

  8. ACM-ICPC 2017 沈阳赛区现场赛 M. Wandering Robots && HDU 6229(思维+期望)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6229 参考题解:https://blog.csdn.net/lifelikes/article/det ...

  9. 2014ACM/ICPC亚洲区鞍山赛区现场赛1009Osu!

    鞍山的签到题,求两点之间的距离除以时间的最大值.直接暴力过的. A - Osu! Time Limit:1000MS     Memory Limit:262144KB     64bit IO Fo ...

随机推荐

  1. PostgreSQL 修改设置数据库的默认用户以及权限.

    1. 登录PG数据库. psql -U postgres 界面效果为: [root@centos76 ~]# psql -U postgres psql (10.7) Type "help& ...

  2. 2019年08月21日 服务部署笔记 请求打不到域名后某个pod上

    背景: 一个小项目http+https的小项目, 需要配置域名, 因http 和 https服务共存, 所以决定域名后面挂两个不同的LVS, 80端口一个, 443端口一个. 服务框架: nginx服 ...

  3. Git在IDEA工具中快捷拉取代码

    在拥有GitLab账号之后, 进入IDEA中,点击vcs菜单-->Checkout from Version Control-->Git 随后会出现一个弹框,输入git上的项目地址点击CL ...

  4. (四)Spring 的 bean 管理(注解方式)

    目录 前言 使用 aop 的配置文件写法 开启注解扫描 利用注解创建对象 注解方式注入属性 配置文件和注解混合使用 前言 注解可以写在 类.方法.属性 上 : 使用 注解,需要导入 aop 包: 使用 ...

  5. 关于python中的包,模块导入的问题详解(一)

    最近由于初学python,对包,模块的导入问题进行了资料的搜集,查阅,在这里做一个总结: 一: import 模块 在import的过程中发生了什么?我们用一个实验来说明: 以上截图表明:在impor ...

  6. docker使用的一些需要注意事项

    1.程序需要前台运行 程序必须前台执行,如果是java进程的话  不要有nohup   或者使用service的方式进行后台运行 否则可能会出现频繁启动应用的问题 原因就是docker只能管理运行中的 ...

  7. select into from与insert into select区别

    创建一个table2  向table2中插入 table1中name为11的所有行(前提table2不存在) select * into table2 from table1 where name=‘ ...

  8. JavaScript实现按照指定长度为数字前面补零输出的方法

    本文实例讲述了JavaScript实现按照指定长度为数字前面补零输出的方法.分享给大家供大家参考.具体分析如下: 例如我们希望输出的数字长度是固定的,假设为10,如果数字为123,则输出0000000 ...

  9. Javascript的学习清单

    Javascript的学习清单 Javascript学习资源 程序员必读书籍 深入理解JavaScript系列 es6教程 jQuery中文文档 vue官网 zeptojs中文版 常用的插件与UI组件 ...

  10. 利用axis调用webservice接口

    一.首先把wsdl文件放入eclipse中某个项目中的src目录下 二.右键弹出webservice,然后点击webservice菜单,选中genernator client ,选择axis生成Jav ...