题意:给你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)的更多相关文章

  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. Javascript生成二维码(QR)

    网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...

  4. iOS二维码生成、识别、扫描等

    二维码扫描 前言: 最近的项目中使用到了二维码,二维码这个模块功能也完成:觉得还是有必要总结一下用来做记录.好长时间没有写二维码了都忘记在差不多了,重新拾起来还是挻快的. 二维码使用场景: 生活中有很 ...

  5. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo

    有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...

  6. 免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)

    在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码.无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码.二维码 (dimensional barcode) , ...

  7. 基于SignalR的消息推送与二维码描登录实现

    1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...

  8. 微信小程序的机会在于重新理解群组与二维码

    历时一年,唯一一个尚未发布就获得Pony Ma与Allen Zhang站台的产品:微信小程序,将于2017年1月9日正式上线了.我很期待.唯一要警惕的是:防止长考出臭棋. 在上线前夕,我对于如何借助小 ...

  9. javaScript生成二维码(支持中文,生成logo)

    资料搜索 选择star最多的两个 第一个就是用的比较多的jquery.qrcode.js(但不支持中文,不能带logo)啦,第二个支持ie6+,支持中文,根据第二个源代码,使得,jquery.qrco ...

随机推荐

  1. 32-2题:LeetCode102. Binary Tree Level Order Traversal二叉树层次遍历/分行从上到下打印二叉树

    题目 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 ...

  2. linux网络编程之断点传输文件

    以下载链接"http://www.boa.org/boa-0.94.13.tar.gz"为例: 断点续传实验大概步骤: ===================== 1,使用geth ...

  3. 二十五、MySQL 索引

    MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...

  4. vue系列之vue cli 3引入ts

    插件 Vue2.5+ Typescript 引入全面指南 vue-class-component强化 Vue 组件,使用 TypeScript/装饰器 增强 Vue 组件 vue-property-d ...

  5. Python 正则表达式 贪心匹配和非贪心匹配

    Python的正则表达式默认是“贪心匹配”,即在有第二义的情况下,尽可能匹配最长的字符串,在正则表达式的花括号后面跟上问号,可以变为非贪心模式 >>> >>> ha ...

  6. python爬虫的基本思路

    爬虫:请求网站并提取数据的自动化程序. 流程: 发送请求 -> 获取数据 -> 解析数据 -> 存储数据

  7. linux硬件基础

    1. 服务器分类 机架式服务器(主要用这个). 刀片式服务器. 塔式服务器. 2. 机架式服务器 服务器的尺: U - 2U. 服务器核心之电源: 双电源 AB 路. 服务器核心之 CPU-计算 CP ...

  8. Tempter of the Bone HDU - 1010(dfs)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  9. POJ 3370 Halloween treats(抽屉原理)

    Halloween treats Every year there is the same problem at Halloween: Each neighbour is only willing t ...

  10. jmeter连接数据库之增删改查

    配置jdbc: 查询sql配置: 插入sql配置: 修改sql配置: 删除sql配置: