【HDOJ5517】Triple(二维BIT)
题意:给你n个二元组<a,b>, m个三元组<c,d,e>. 如果d = e,那么<a,c,d>会组成一个新的三元组集合G.
问G中有多少个三元组在凸点.(没有其它三元组比它大)
定义大为一个三维偏序的关系,若(x,y,z)与(a,b,c)不完全相同并且x>=y,y>=b,z>=c则描述为(x,y,z)比(a,b,c)大
n,m<=1e5,1<=a[i],b[i],e[i]<=1e5,1<=c[i],d[i]<=1e3
思路:对于一个b只保留最大的a,记录最值与出现的次数
用vector存对于每一个e来说的所有(c,d),生成所有(a,c,d)后按a从大到小排序,相同的数对合并,剩下的两维就转化为单点修改,询问右下矩形有没有点
因为1<=c[i],d[i]<=1e3,用二维数组维护,前缀和改成后缀和即可
这轮补题补完把陌上花开补一下吧……都搁了不知道多久了
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define fi first
#define se second
#define MP make_pair
#define N 110000
#define M 1100
#define MOD 2147493647
#define eps 1e-8
#define pi acos(-1)
#define oo 1100000000 struct node
{
int x,y;
node() {}
node(int x,int y):x(x),y(y) {}
};
vector<node>c[N]; struct arr
{
int x,y,z,num;
}a[N]; ll t[M][M];
int mx[N],num[N]; bool cmp(arr a,arr b)
{
if(a.x!=b.x) return a.x>b.x;
if(a.y!=b.y) return a.y>b.y;
return a.z>b.z;
} int lowbit(int x)
{
return x&(-x);
} ll query(int X,int Y)
{
ll ans=;
int x=X;
while(x<=M-)
{
int y=Y;
while(y<=M-)
{
ans+=t[x][y];
y+=lowbit(y);
}
x+=lowbit(x);
}
return ans;
} void add(int X,int Y)
{
int x=X;
while(x)
{
int y=Y;
while(y)
{
t[x][y]++;
y-=lowbit(y);
}
x-=lowbit(x);
}
} int main()
{
freopen("hdoj5517.in","r",stdin);
freopen("hdoj5517.out","w",stdout);
int cas;
scanf("%d",&cas);
for(int v=;v<=cas;v++)
{
int n,m;
scanf("%d%d",&n,&m);
memset(t,,sizeof(t));
for(int i=;i<N;i++)
{
mx[i]=-oo; num[i]=;
}
for(int i=;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
if(x>mx[y])
{
mx[y]=x; num[y]=;
}
if(x==mx[y]) num[y]++;
} for(int i=;i<N;i++) c[i].clear();
for(int i=;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
c[z].push_back(node(x,y));
}
n=;
for(int i=;i<N;i++)
{
for(int j=;j<=(int)c[i].size()-;j++)
{
a[++n].x=mx[i];
a[n].y=c[i][j].x;
a[n].z=c[i][j].y;
a[n].num=num[i];
}
}
sort(a+,a+n+,cmp); int n1=n;
n=;
for(int i=;i<=n1;i++)
if(a[i].x==a[n].x&&a[i].y==a[n].y&&a[i].z==a[n].z) a[n].num+=a[i].num;
else a[++n]=a[i];
ll ans=;
for(int i=;i<=n;i++)
{
int y=a[i].y;
int z=a[i].z;
if(!query(y,z)) ans+=a[i].num;
add(y,z);
}
printf("Case #%d: %I64d\n",v,ans);
}
return ;
}
【HDOJ5517】Triple(二维BIT)的更多相关文章
- hdu 5517 Triple(二维树状数组)
Triple Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- 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)然后,当 ...
- Javascript生成二维码(QR)
网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...
- iOS二维码生成、识别、扫描等
二维码扫描 前言: 最近的项目中使用到了二维码,二维码这个模块功能也完成:觉得还是有必要总结一下用来做记录.好长时间没有写二维码了都忘记在差不多了,重新拾起来还是挻快的. 二维码使用场景: 生活中有很 ...
- 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo
有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...
- 免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码.无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码.二维码 (dimensional barcode) , ...
- 基于SignalR的消息推送与二维码描登录实现
1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...
- 微信小程序的机会在于重新理解群组与二维码
历时一年,唯一一个尚未发布就获得Pony Ma与Allen Zhang站台的产品:微信小程序,将于2017年1月9日正式上线了.我很期待.唯一要警惕的是:防止长考出臭棋. 在上线前夕,我对于如何借助小 ...
- javaScript生成二维码(支持中文,生成logo)
资料搜索 选择star最多的两个 第一个就是用的比较多的jquery.qrcode.js(但不支持中文,不能带logo)啦,第二个支持ie6+,支持中文,根据第二个源代码,使得,jquery.qrco ...
随机推荐
- 牛客小白月赛5 D 阶乘(factorial) 【前缀】
链接:https://www.nowcoder.com/acm/contest/135/D 题目描述 输入描述: 输入数据共一行,一个正整数n,意义如“问题描述”. 输出描述: 输出一行描述答案: 一 ...
- Java,集合按自定义规则排序
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.u ...
- Java - 网络
要事为先,你如果想要在这个行业发展下去的话,实际上三角形的三个点在支撑着你发展,一个是技术.一个是管理(不是说管理别人,是管理你自己的时间,管理你自己的精力).还有一个就是沟通,注重这三点均衡的发展. ...
- Python知识点入门笔记——特色数据类型(字典)
Python中字典是一些列键 (key) 值 (value) 对组成的,形式如下 {键1:值1,键2:值:2} 每个键值对用冒号隔开,每对之间用逗号隔开 键必须是唯一的,必须是不可变的,如字符串,数字 ...
- vue之神奇的动态按钮
今天我们将利用vue的条件指令来完成一个简易的动态变色功能按钮 首先我们还是要对vue进行配置,在上篇随笔中有相关下载教学. 然后我们要在html页面上搭建三个简易的按钮,颜色分别为紫,绿和蓝(颜色随 ...
- python3 练习题100例 (十五)
这个比较难,主要难在考虑的问题太多,有好几个还没写出来.有空再来改进.请高手指教! #!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ ...
- 用django实现邮件发送
settings配置 EMAIL_HOST = 'smtp.qq.com' # 如果是163换成stmp.163.com EMAIL_PORT = 465 # qq邮箱的端口 EMAIL_HOST_U ...
- Assignment HDU - 2853(二分图匹配 KM 新边旧边)
传送门: Assignment HDU - 2853 题意:题意直接那松神的题意了.给了你n个公司和m个任务,然后给你了每个公司处理每个任务的效率.然后他已经给你了每个公司的分配方案,让你求出最多能增 ...
- mysql中外联和 is null 结合使用
今天学习mysql ,碰到了一个问题:有部门表,员工表,员工表中有一个部门表的外键,查询没有员工的部门名称. 表结构如下: 员工表employees: 部门表department表: 题目很简单呢,信 ...
- MongoDB01——安装MangoDB
一.MongoDB的下载 到MongoDB的官网——https://www.mongodb.com/download-center/community,选择要下载的版本,点击Download 二.安装 ...