题意是给了 n个二元组 m个三元组, 二元组可以和三元组 合并生成3元组,合并条件是<a,b> 与<c,d,e>合并成 <a,c,d> 前提是 b==e,

如果存在组合 uwv 使得u>=a w>=c v>=d 并且uwv和acd不等  就说abc 不是最优的,求问最后又多少个组合是最优的 , 这个组合中是允许重复的

我们对于每个b只取最大的a,然后让这个最大的a去和相应的b,c进行组合,然后对于这样的三元组 为了省去判断和他相等的个数,我们直接将相同的元组合并到一起去,

然后枚举a求在 在矩阵C[b][c]右下边是否存在值如果存在显然这个就不是最优的,用二维树状数组解决这个问题

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <string.h>
using namespace std;
const int maxn=;
struct point{
int a,c,d,nu;
bool operator <(const point &rhs)const{
if(a!=rhs.a)return a<rhs.a;
if(c!=rhs.c)return c<rhs.c;
return d<rhs.d;
}
bool operator ==(const point &rhs)const{
return a==rhs.a&&c==rhs.c&&d==rhs.d;
}
}P[maxn];
int B[maxn];
int nu[maxn];
int C[][];
int Nc,Nd,numofC;
void init()
{
numofC=Nc=Nd=;
memset(B,,sizeof(B));
memset(nu,,sizeof(nu));
memset(C,,sizeof(C));
}
int lowbit(int x)
{
return x&(-x);
}
void add(int c,int d,int val)
{
for(int i=c; i<=Nc; i+=lowbit(i))
for(int j=d; j<=Nd; j+=lowbit(j))
C[i][j]+=val;
}
int sum(int c, int d)
{
int ans=;
for(int i=c; i>; i-=lowbit(i))
for(int j=d; j>; j-=lowbit(j))
ans+=C[i][j];
return ans;
}
int main()
{
int cas;
scanf("%d",&cas);
for(int cc=; cc<=cas; cc++)
{
int n,m;
scanf("%d%d",&n,&m);
init();
for(int i=; i<n; i++)
{
int a,b;
scanf("%d%d",&a,&b);
if(B[b]<a){ B[b]=a; nu[b]=;}
else if(B[b]==a) nu[b]++;
}
for(int i=; i<m; i++)
{
int c,d,e;
scanf("%d%d%d",&c,&d,&e);
if(nu[e]>)
{
point t;
t.a=B[e]; t.c=c; t.d=d; t.nu=nu[e];
P[numofC++]=t;
}
Nc=max(c,Nc); Nd=max(Nd,d);
}
sort(P,P+numofC);
int ge=;
for(int i=; i<numofC; i++)
if(P[i]==P[ge-])P[ge-].nu+=P[i].nu;
else P[ge++]=P[i];
numofC=ge;
int ans=;
ge=;
for(int i=numofC-; i>=; i--)
{
point t=P[i];
int s2=sum(t.c-,Nd);
int s3=sum(Nc,t.d-);
int s4=sum(t.c-,t.d-);
if(ge-s2-s3+s4 == ){
ans+=t.nu;
}
ge++;
add(t.c,t.d,);
}
printf("Case #%d: %d\n",cc,ans); }
return ;
}

hdu5517 二维树状数组的更多相关文章

  1. 二维树状数组 BZOJ 1452 [JSOI2009]Count

    题目链接 裸二维树状数组 #include <bits/stdc++.h> const int N = 305; struct BIT_2D { int c[105][N][N], n, ...

  2. HDU1559 最大子矩阵 (二维树状数组)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)  ...

  3. POJMatrix(二维树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 22058   Accepted: 8219 Descripti ...

  4. poj 1195:Mobile phones(二维树状数组,矩阵求和)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14489   Accepted: 6735 De ...

  5. Codeforces Round #198 (Div. 1) D. Iahub and Xors 二维树状数组*

    D. Iahub and Xors   Iahub does not like background stories, so he'll tell you exactly what this prob ...

  6. POJ 2155 Matrix(二维树状数组+区间更新单点求和)

    题意:给你一个n*n的全0矩阵,每次有两个操作: C x1 y1 x2 y2:将(x1,y1)到(x2,y2)的矩阵全部值求反 Q x y:求出(x,y)位置的值 树状数组标准是求单点更新区间求和,但 ...

  7. [poj2155]Matrix(二维树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 25004   Accepted: 9261 Descripti ...

  8. POJ 2155 Matrix (二维树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17224   Accepted: 6460 Descripti ...

  9. [POJ2155]Matrix(二维树状数组)

    题目:http://poj.org/problem?id=2155 中文题意: 给你一个初始全部为0的n*n矩阵,有如下操作 1.C x1 y1 x2 y2 把矩形(x1,y1,x2,y2)上的数全部 ...

随机推荐

  1. 梯度下降(gradient descent)算法简介

    梯度下降法是一个最优化算法,通常也称为最速下降法.最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的.最速下降法是用 ...

  2. 当我们直接打印定义的对象的时候,隐含的是打印toString()的返回值。

      以下介绍的三种方法属于Object: (1)  finalize方法:当一个对象被垃圾回收的时候调用的方法. (2)  toString():是利用字符串来表示对象. 当我们直接打印定义的对象的时 ...

  3. SpringBoot系统列 5 - 接口版本控制、SpringBoot FreeMarker模板引擎

    接着上篇博客的代码继续写 1.接口版本控制 一个系统上线后会不断迭代更新,需求也会不断变化,有可能接口的参数也会发生变化,如果在原有的参数上直接修改,可能会影响线上系统的正常运行,这时我们就需要设置不 ...

  4. HBuilder打包React单页面,Android返回功能

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  5. 源码分析八( hashmap工作原理)

    首先从一条简单的语句开始,创建了一个hashmap对象: Map<String,String> hashmap = new HashMap<String,String>(); ...

  6. 库存秒杀问题-redis解决方案- 接口限流

    <?php/** * Created by PhpStorm. * redis 销量超卖秒杀解决方案 * redis 文档:http://doc.redisfans.com/ * ab -n 1 ...

  7. puppet(1)-简介

    puppet: 开源的.新一代的集中化的配置管理工具: 目标状态 配置语言 Luke Kanies,puppet labs bootstrap --> configuration --> ...

  8. 一个简易的netty udp服务端

    netty号称java高性能网络库,为人帮忙中,研究了下,写了一个demo.反复调试,更改,局域网两个客户端同时for循环发10000个20字节的数据包,入库mysql,居然没丢. 思路,netty的 ...

  9. 【CF497E】Subsequences Return 矩阵乘法

    [CF497E]Subsequences Return 题意:设$s_k(x)$表示x在k进制下各位数的和mod k的值.给出k,现有序列$s_k(1),s_k(2),...s_k(n)$.求这个序列 ...

  10. 求问ps如何导出单个切片及PS导出所有的切片图像

    在ps里面对图片进行切片,并根据需要弄好切片,利用shift键,可以选择其中部分的切片: 弄好以后,点击“文件”,选择“存储为WEB和设备所用格式”:. 在打开的“存储为WEB和设备所用格式”界面上点 ...