Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 160    Accepted Submission(s): 72


Problem Description
Given the finite multi-set A of n pairs
of integers, an another finite multi-set B of m triples
of integers, we define the product of A and B as
multi-set

C=A∗B={⟨a,c,d⟩∣⟨a,b⟩∈A, ⟨c,d,e⟩∈B and b=e}

For each ⟨a,b,c⟩∈C,
its BETTER set is defined as

BETTERC(⟨a,b,c⟩)={⟨u,v,w⟩∈C∣⟨u,v,w⟩≠⟨a,b,c⟩, u≥a, v≥b, w≥c}

As a \textbf{multi-set} of triples, we define the TOP subset (as a multi-set as well) of C,
denoted by TOP(C),
as

TOP(C)={⟨a,b,c⟩∈C∣BETTERC(⟨a,b,c⟩)=∅}

You need to compute the size of TOP(C).
 

Input
The input contains several test cases. The first line of the input is a single integer t (1≤t≤10) which
is the number of test case. Then t test
cases follow.

Each test case contains three lines. The first line contains two integers n (1≤n≤105) and m (1≤m≤105) corresponding
to the size of A and B respectively.

The second line contains 2×n nonnegative
integers

a1,b1,a2,b2,⋯,an,bn

which describe the multi-set A,
where 1≤ai,bi≤105.

The third line contains 3×m nonnegative
integers

c1,d1,e1,c2,d2,e3,⋯,cm,dm,em

corresponding to the m triples
of integers in B,
where 1≤ci,di≤103 and 1≤ei≤105.

 

Output
For each test case, you should output the size of set TOP(C).
 

Sample Input

2
5 9
1 1 2 2 3 3 3 3 4 2
1 4 1 2 2 1 4 1 1 1 3 2 3 2 2 4 1 2 2 4 3 3 2 3 4 1 3
3 4
2 7 2 7 2 7
1 4 7 2 3 7 3 2 7 4 1 7
 

Sample Output

Case #1: 5
Case #2: 12
思路:这题可以用二维树状数组做,先对二元组按y关键字升序排列,对三元组按z关键字升序排列,找出二元组中y相同的情况下最大的x及其个数,然后依次乘上三元组形成新的三元组并放入map中,用map记录三元组即其个数,便于后面统计方案。然后删去不合法的三元组,可以先对其按x,y,z一二三关键字降序排列,然后依次循环,这样首先保证x是递减的,然后如果在它右上方有点,那么这个点就要删除(即y,z都大于等于它),可以用树状数组实现。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
#define inf 99999999
#define maxn 100050
int first[maxn],last[maxn],cnt[maxn],maxnum[maxn];
struct node1{
int x,y;
}a[maxn]; struct node2{
int x,y,z;
}c[maxn]; bool cmp(node1 a,node1 b){
if(a.y==b.y)return a.x>b.x;
return a.y<b.y;
}
bool cmp1(node2 a,node2 b){
return a.z<b.z;
}
struct node{
int x,y,z;
}temp,temp2; bool operator<(node a,node b){
if(a.x==b.x){
if(a.y==b.y)return a.z>b.z;
return a.y>b.y;
}
return a.x>b.x;
} map<node,int>mp;
map<node,int>::iterator it; int b[1005][1005],pan[1006][1006];
int lowbit(int x){
return x&(-x);
}
void update(int x,int y,int num)
{
int i,j;
for(i=x;i<=1003;i+=lowbit(i)){
for(j=y;j<=1003;j+=lowbit(j)){
b[i][j]+=num;
}
}
} int getsum(int x,int y)
{
int num=0,i,j;
for(i=x;i>0;i-=lowbit(i)){
for(j=y;j>0;j-=lowbit(j)){
num+=b[i][j];
}
}
return num;
} int cal(int x,int y){
return getsum(1003,1003)-getsum(1003,y-1)-getsum(x-1,1003)+getsum(x-1,y-1);
} int main()
{
int n,m,i,j,T,d,e,f,t,maxx,num,cas=0;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d%d",&a[i].x,&a[i].y);
}
sort(a+1,a+n+1,cmp);
for(i=1;i<=m;i++){
scanf("%d%d%d",&c[i].x,&c[i].y,&c[i].z);
}
sort(c+1,c+m+1,cmp1);
memset(first,0,sizeof(first));
memset(last,0,sizeof(last));
t=c[1].z;
first[t]=1;
c[m+1].z=-1;
for(i=2;i<=m+1;i++){
if(c[i].z!=t ){
last[t]=i-1;
t=c[i].z;
first[t]=i;
}
}
memset(maxnum,-1,sizeof(maxnum));
memset(cnt,0,sizeof(cnt));
for(i=1;i<=n;i++){
if(maxnum[a[i].y ]==-1 ){
maxnum[a[i].y ]=a[i].x;
cnt[a[i].y ]=1;
}
else{
if(maxnum[a[i].y ]<a[i].x){
maxnum[a[i].y ]=a[i].x;
cnt[a[i].y ]=1;
}
else if(maxnum[a[i].y ]==a[i].x){
cnt[a[i].y ]++; } } }
mp.clear();
for(i=1;i<=10000;i++){
if(maxnum[i ]!=-1 && first[i ]!=0 ){
for(j=first[i ];j<=last[i ];j++){
temp.x=maxnum[i];temp.y=c[j].x;temp.z=c[j].y;
mp[temp]+=cnt[i];
}
}
}
memset(b,0,sizeof(b));
memset(pan,0,sizeof(pan));
int ans=0;
for(it=mp.begin();it!=mp.end();it++){
temp=it->first;
int y=temp.y;
int z=temp.z;
if(pan[y][z]==0 && cal(y,z)==0){
ans+=it->second;
}
pan[y][z]=1;
update(y,z,1);
}
cas++;
printf("Case #%d: %d\n",cas,ans);
}
return 0;
}

hdu517 Triple的更多相关文章

  1. 山东省第七届ACM省赛------Triple Nim

    Triple Nim Time Limit: 2000MS Memory limit: 65536K 题目描述 Alice and Bob are always playing all kinds o ...

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

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

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

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

  4. Codeforces 1071 C - Triple Flips

    C - Triple Flips 思路: 小范围暴力 大范围递归构造 构造方法: solve(l, r) 表示使l 到 r 区间全变为0的方法 为了使反转次数小于等于n/3 + 12 我们只需要保证每 ...

  5. 【BZOJ3771】Triple(生成函数,多项式运算)

    [BZOJ3771]Triple(生成函数,多项式运算) 题面 有\(n\)个价值\(w\)不同的物品 可以任意选择\(1,2,3\)个组合在一起 输出能够组成的所有价值以及方案数. \(n,w< ...

  6. PAT 1009. Triple Inversions (35) 数状数组

    Given a list of N integers A1, A2, A3,...AN, there's a famous problem to count the number of inversi ...

  7. 【BZOJ 3771】 3771: Triple (FFT+容斥)

    3771: Triple Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 547  Solved: 307 Description 我们讲一个悲伤的故事. ...

  8. hihoCoder #1872 : Pythagorean triple

    此题是 2018 年 ICPC Asia Beijing Regional Contest 的 C 题. 题目大意 求斜边长度不超过 $n$($ n \le 10^9$) 的勾股数的数量.不计两直角边 ...

  9. bzoj 3771 Triple FFT 生成函数+容斥

    Triple Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 847  Solved: 482[Submit][Status][Discuss] Desc ...

随机推荐

  1. rm: cannot remove `/tmp/localhost-mysql_cacti_stats.txt': Operation not permitted

    [root@DBslave tmp]# chown zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt

  2. kubernets之Replication Controller

    一  Replication Controller的介绍      pod可能会由于各种原因消失和多出来,例如node节点去除集群或者人为的手工创建,所以为了方便和管理pod的数量,k8s里面 的另外 ...

  3. Java高并发与多线程(三)-----线程的基本属性和主要方法

    今天,我们开始Java高并发与多线程的第三篇,线程的基本属性和主要方法. [属性] 编号(ID) 类型long 用于标识不同的线程,编号唯一,只存在java虚拟机的一次运行 名称(Name) 类型St ...

  4. REUSE_ALV_GRID_DISPLAY_LVC 的fieldcat定义

    在使用REUSE_ALV_GRID_DISPLAY_LVC函数的时候,需要注意的是,内表中如果有P类型的或者数据元素为BDMNG等类型是,在定义fieldcat的时候,注意要指定fieldcat-da ...

  5. STM32驱动LCD原理

    TFTLCD即薄膜晶体管液晶显示器.它与无源TN-LCD.STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性 ...

  6. OLED的波形曲线、进度条、图片显示(STM32 HAL库 模拟SPI通信 5线OLED屏幕)详细篇

    少废话,先上效果图 屏幕显示效果         全家福 一.基础认识及引脚介绍 屏幕参数: 尺寸:0.96英寸 分辨率:128*64 驱动芯片:SSD1306 驱动接口协议:SPI 引脚说明: 二. ...

  7. pytorch——合并分割

    分割与合并 import torch import numpy as np #假设a是班级1-4的数据,每个班级里有32个学生,每个学生有8门分数 #假设b是班级5-9的数据,每个班级里有32个学生, ...

  8. deepin定制deepin-terminal

    一. 背景介绍 本人以前在win10上经常使用xshell来登陆服务器.xshell提供了很丰富的功能和快捷键.个人比较喜欢的包括三个功能 终端透明 双击时根据分隔符选中文字 突出显示 但是自从使用d ...

  9. 【题解】CF952F 2 + 2 != 4

    题目传送门 首先这道题没有翻译,这是很奇怪的,经过了(bai)查(du)字(fan)典(yi)之后,你会发现,什么用都没有-- 楼下的 dalao 们给的解释非常的模糊(果然还是我太弱了),于是我自己 ...

  10. qbxt 学习笔记 10.2 晚

    目录 整除性 素数 组合数 Lucas 定理: 整除性 直接搬 ppt 特殊的整除性质 素数 素数定理: 线性筛: 原理:一个合数只由其最大素因子筛去. 代码: 组合数 Lucas 定理: \[\bi ...