题意叫你求交叉点的个数,转换一下思维,把第一个数看作是i,和它相连接的第二个数看作是ai,当i < j 且 ai > aj时这时才有交叉点,

这样就转换为求逆序对的个数;首先,把他x从小到大排序,x相同的按y从大到小排序,排完序后,在使用合并排序,计算逆序对的个数。

#include<math.h>
#include<stdio.h>
#include<limits.h>
#define MAX 1000005
 
int L[MAX/2],R[MAX/2];
long long sum;

typedef struct NODE{
    int e;
    int w;    
}node;
node A[MAX];

void MERGE(int p,int q,int r)
{
    int n1,n2,i,j,k;
    n1=q-p+1;
    n2=r-q;
    for(i=0;i<n1;i++)    L[i]=A[p+i].w;   // 左部分
    L[n1]=INT_MAX;
    for(j=0;j<n2;j++)    R[j]=A[q+1+j].w;     // 右部分
    R[n2]=INT_MAX;
    i=0; j=0;
    for(k=p;k<=r;k++){                   // 归并,递增序列
        if(L[i]<=R[j]) {
            A[k].w=L[i];
            i++;               
        }
        else{
            sum+=(long long)(n1-i);
            A[k].w=R[j];
            j++;     
        }
    }     
}

void MergeSort(int p,int r)
{
    int q;
    if(p<r){
        q=(p+r)/2;
        MergeSort(p,q);
        MergeSort(q+1,r);
        MERGE(p,q,r);        
    }     
}

int cmp(const void *a,const void *b )
{
    if(((node *)a)->e>((node *)b)->e) return 1;
    else if((((node *)a)->e==((node *)b)->e) && (((node *)a)->w>((node *)b)->w))
        return 1;
    return -1;
}
int main()
{
    int i,k,j,m,n,t;
    scanf("%d",&t);
    for(j=1;j<=t;j++){
        sum=0;
        scanf("%d%d%d",&n,&m,&k);
        for(i=0;i<k;i++)
            scanf("%d%d",&A[i].e,&A[i].w);
        qsort(A,k,sizeof(node),cmp);
        MergeSort(0,k-1);        
        printf("Test case %d: %lld\n",j,sum);    
    }
    system("pause");
    return 0;    
}

ZOJ 3129 Japan相关推荐

  1. ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!

    两题水题: 1.如果一个数能被分解为两个素数的乘积,则称为Semi-Prime,给你一个数,让你判断是不是Semi-Prime数. 2.定义F(0) = 7, F(1) = 11, F(n) = F( ...

  2. zoj 1204 Additive equations

    ACCEPT acm作业 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=204 因为老师是在集合那里要我们做这道题.所以我很是天 ...

  3. 【HDU/POJ/ZOJ】Calling Extraterrestrial Intelligence Again (素数打表模板)

    http://poj.org/problem?id=1411  POJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=168 ...

  4. 参加LinuxCon Japan 2012

    好长时间没有写博客了.一是时间紧张,另外是这段时间来没有什么可记录的,也发现越来越没有什么文笔可言了,越来越趋于流水账形式了. 发现上小学的时候一写流水账就会被老师批评,说这孩子作文写的跟记流水账似的 ...

  5. 模拟 ZOJ 3878 Convert QWERTY to Dvorak

    题目传送门 1 /* 2 模拟:手敲map一一映射,累! 3 除了忘记读入字符串不能用gets用getline外还是很顺利的AC了:) 4 */ 5 #include <cstdio> 6 ...

  6. 矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence

    题目传送门 1 /* 2 题意:加上适当的括号,改变计算顺序使得总的计算次数最少 3 矩阵连乘积问题,DP解决:状态转移方程: 4 dp[i][j] = min (dp[i][k] + dp[k+1] ...

  7. ZOJ 3597 Hit the Target! (线段树扫描线 -- 矩形所能覆盖的最多的点数)

    ZOJ 3597 题意是说有n把枪,有m个靶子,每把枪只有一发子弹(也就是说一把枪最多只能打一个靶子), 告诉你第 i 把枪可以打到第j个靶, 现在等概率的出现一个连续的P把枪,在知道这P把枪之后,你 ...

  8. ZOJ 1696 Viva Confetti 计算几何

    计算几何:按顺序给n个圆覆盖.问最后能够有几个圆被看见.. . 对每一个圆求和其它圆的交点,每两个交点之间就是可能被看到的圆弧,取圆弧的中点,往外扩展一点或者往里缩一点,从上往下推断有没有圆能够盖住这 ...

  9. 九度OJ—题目1032:ZOJ

    题目描写叙述: 读入一个字符串.字符串中包括ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出.当某个字符用完时,剩下的仍然依照ZOJ的顺序输出. 输入: 题目包括多组用例,每组用例占一行,包括ZOJ ...

最新文章

  1. 【错误归纳】selenium.common.exceptions.WebDriverException: Message: unknown error
  2. 创建二级索引_技术分享 | InnoDB 排序索引的构建
  3. c语言中怎么 写子程序,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...
  4. NoSQL架构实践(三)——以NoSQL为缓存
  5. cordova 支付_Cordova打包教程(H5项目打包成ipa)
  6. Bootstrap3 工具提示插件的事件
  7. 文档丨Oracle 20c 概念手册
  8. Core Animation 文档翻译 (第六篇)—高级动画技巧
  9. java局部变量的描述正确的是_【Java入门课|这才是Java局部变量的正确使用方法,你真的会用这些吗】- 环球网校...
  10. 解决Cannot dlopen some GPU libraries.问题
  11. kali Linux 系统安装教程
  12. 苹果账号被盗用户:支付宝、微信被盗刷追偿难
  13. Uniapp开发仿哔哩哔哩/短视频系统APP源码
  14. c语言字母概率,C/C++知识点之智邮普创c语言面试题 ---- 字母概率
  15. 购买您的工作从家庭企业经营使用这些技巧
  16. chmod不是内部或外部命令
  17. GPS导航(一):分类和原理
  18. 论文、软件工程常用图表
  19. harbor企业级镜像仓库搭建
  20. 互联网医疗大数据类型的深度分析

热门文章

  1. 666!你准备好和波士顿狗来场热舞了吗?
  2. 考研英语(1-10)转自何凯文老师
  3. 程序员被狂虐的17种姿势,简直不要太过分!
  4. Android入门(二)——常见布局与控件
  5. java 处理换行符_Java 文件换行符识别与转换
  6. ELIFE S7、IUNI i1 加入TestBird手游云测试平台
  7. 小程序解析后端返回的html格式数据
  8. 【微服务】服务熔断降级 Sentinel
  9. CWDM光模块和普通光模块的区别
  10. 王思聪100万电脑配置——详情表(附价格)