题意:计划在东边的城市和西边的城市中建路,东边的点从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. angularjs的一些坑关于 $sec

    今天遇到$sec的问题 app.filter('to_trusted', ['$sce', function ($sce) { return function (text) { return $sce ...

  2. ElasticSearch部署安装

    测试版本:elasticsearch-5.1.1 1.Windows环境下安装(win10系统) 1)解压elasticsearch-5.1.1.zip. 2)执行elasticsearch.bat启 ...

  3. ORACLE 连接SQLSERVER 数据库备忘

    最近工作需要,要从SQL SERVER数据库中同步提取数据. 这里采用了  Oracle Gateway 来连接,折腾了半天,终于搞定,记录下已备下次使用. 基本资料网上都可以搜很多,官网配置说明在这 ...

  4. blade and soul Group Combos

    Group Combos A martial artist always make friends along their way. They learn how to work and fight ...

  5. Java自由块(静态和非静态)(转载)

    java中的自由块分为两种: 静态块和非静态块 静态块: public class Test { 2 static int x = 10; 3 //静态块:静态块的执行时机是在class文件装载的时候 ...

  6. lock

    #ifndef lock_h #define lock_h #include <stdint.h> #include <string.h> #include "myd ...

  7. 怎么将Android studio 的“ build:gradle改低一点”

    参考来源:http://bbs.qcloud.com/thread-17193-1-1.html Error:Execution failed for task ':xxxx:compileDebug ...

  8. 在QtCreator 2.1.0 下使用opencv231库加载图片并显示

    在.pro中库连接如上图,具体规则正在学习,注意debug下连接*d.lib.release下链接.lib.没有d的. 如果出现imread不可以加载图片,cvloadImage却可以,则是上面说的连 ...

  9. JSP内置对象---out内置对象

    <%@ page language="java" import="java.util.*" contentType="text/html; ch ...

  10. powershell字符界面的,powershell加WPF界面的,2048游戏

    ------[序言]------ 1 2048游戏,有段时间很火,我在地铁上看有人玩过.没错,坐地铁很无聊,人家玩我就一直盯着看. 2 我在电脑上找了一个,试玩了以下,没几次格子就满了.我就气呼呼的放 ...