题意:计划在东边的城市和西边的城市中建路,东边的点从1.....n,西边的点从1......m,求这些点连起来后有多少个交叉。

PS:这个题目没有任何思路,没想到是树状数组。。。。

交叉出5个点

分析:3,1肯定能和1与2,3,4连线,2与2,3,4的连线相交。即x,y连线肯定和a(小于x),b(大于y)的连线,或者a(大于x),b(小于y)的连线相交。就看有几条这种连线。因此可以先排序,然后直接看当前x,y的前边比y大的数目有几个.就是逆序对数,可参考POJ2299和POJ2352

 ///逆序对数是求前边有几个比当前更大的数字
///POJ2352 是求前边有几个比当前更小的数字
///按照从大到小排序后求前边有几个次序比他更小的就是逆序对数
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define ll long long
#define repu(i, a, b) for(int i = a; i < b; i ++)
using namespace std;
const int MAXN = ;
ll c[MAXN];
int n,m;
struct S
{
int x,y;
bool operator < (const S& s) const
{
if(x == s.x)
return y < s.y;
else
return x < s.x;
}
} a[MAXN];
int b[MAXN];
int lowbit(int x)
{
return x&(-x);
}
ll getsum(int i)
{
ll s = ;
while(i>)
{
s += c[i];
i -= lowbit(i);
}
return s;
}
void add(int li)
{
while(li<=m)///并不明白这里的结束条件是什么
{
c[li] += 1ll;
li += lowbit(li);
}
}
int main()
{
int T,kase = ;
scanf("%d",&T);
while(T--)
{
int k;
scanf("%d%d%d",&n,&m,&k);
int x,y;
memset(c,,sizeof(c));
for(int i=; i<=k; i++)
scanf("%d%d",&a[i].x,&a[i].y);
ll sum = ;
sort(a+,a+k+);
for(int i=; i<=k; i++)
{
add(a[i].y);
sum += i-getsum(a[i].y);
}
kase++;
printf("Test case %d: %lld\n",kase,sum);
}
return ;
}

转化之后也是逆序对数

POJ 3067 原来是树状数组--真的涨姿势的更多相关文章

  1. poj 3067 Japan(树状数组求逆序数)

    链接:http://poj.org/problem?id=3067 题意:左边有n个城市,右边有m个城市,建k条道路,问有这k条道路中有多少个交点. 分析:将城市按x和y从小到大排序,对于每条道路,求 ...

  2. POJ 3067 Japan 【树状数组经典】

    题目链接:POJ 3067 Japan Japan Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32076   Accep ...

  3. POJ 3067 Japan(树状数组)

                                                                                  Japan   Time Limit: 10 ...

  4. poj 3067 Japan 【树状数组】

    <题目链接> 题目大意: 有两个点集,这两个点集从上至下分别从1~n,1~m编号,现在给出n组数据,(x,y),表示左边点集编号为x的点与右边点集编号为y的点相连,现在要求计算这些线段的交 ...

  5. POJ 3067 - Japan - [归并排序/树状数组(BIT)求逆序对]

    Time Limit: 1000MS Memory Limit: 65536K Description Japan plans to welcome the ACM ICPC World Finals ...

  6. POJ 3067 Japan 【 树状数组 】

    题意:左边有n个城市,右边有m个城市,现在修k条路,问会形成多少个交点 先按照x从小到大排,x相同的话,则按照y从小到大排,然后对于每一个y统计前面有多少个y比它大,它们就一定会相交 另外要用long ...

  7. POJ 2352 Stars(树状数组)

    Stars Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30496   Accepted: 13316 Descripti ...

  8. POJ 3321 Apple Tree (树状数组+dfs序)

    题目链接:http://poj.org/problem?id=3321 给你n个点,n-1条边,1为根节点.给你m条操作,C操作是将x点变反(1变0,0变1),Q操作是询问x节点以及它子树的值之和.初 ...

  9. poj 2828 Buy Tickets(树状数组 | 线段树)

    题目链接:poj 2828 Buy Tickets 题目大意:给定N,表示有个人,给定每一个人站入的位置,以及这个人的权值,如今按队列的顺序输出每一个人的权值. 解题思路:第K大元素,非常巧妙,将人入 ...

随机推荐

  1. div跟随页面滚动

    $(document).ready(function(){ var timer; $(window).scroll(function (){ clearInterval(timer); var top ...

  2. Unity Container 应用示例

    一 项目引用Unity 右键项目引用-> 管理Nuget包->搜索unity->安装Unity 和 Unity Interception Extension,如下图所示. 二 创建基 ...

  3. android .9图的作用

    参考:http://www.cnblogs.com/lianghui66/archive/2013/01/08/2850581.html .9图的介绍 1.这种格式的图片是Android平台上一种被拉 ...

  4. 数据类型和Json格式(转载)

    作者: 阮一峰 日期: 2009年5月30日 1. 前几天,我才知道有一种简化的数据交换格式,叫做yaml. 我翻了一遍它的文档,看懂的地方不多,但是有一句话令我茅塞顿开. 它说,从结构上看,所有的数 ...

  5. Java Bean

    Java 帝国之Java bean (上) Java 帝国之Java bean(下) Difference between DTO, VO, POJO, JavaBeans? Java bean 是个 ...

  6. linux 网卡问题 Device eth0 does not seem to be present,delaying initialization.

    Device eth0 does not seem to be present,delaying initialization. 网上搜索后才发现原因所在:原来vmware在复制了虚拟机后会自动生成一 ...

  7. 一个简单的P2P传输程序

    写了一个简单的P2P传输程序,在P2P的圈子中传输文件,不过为了简便,这个程序没有真正的传输文件,只是简单的判断一下文件的位置在哪里.这个程序可以处理当有一个peer闪退的情况,在这种情况下,剩下的p ...

  8. OC中用NSSortDescriptor对象进行数组排序

    //创建一个数组 NSArray *array = @[@"one", @"two", @"three", @"four" ...

  9. JavaScript 对象的创建

    Object类型是JavaScript中使用最多的一种类型.创建Object实例的方式有多种,接下来一一列举. 1. Object构造函数 person1的friends属性修改影响了person2的 ...

  10. 大不了高三艹个FZU

    即使做错了也不要紧啊,反正人生就这一次