题目地址:POJ 2299

这题以前用归并排序做过。线段树加上离散化也能够做。一般线段树的话会超时。

这题的数字最大到10^10次方,显然太大,可是能够利用下标,下标总共仅仅有50w。能够从数字大的開始向树上加点,然后统计下标比它小即在它左边的数的个数。由于每加一个数的时候。比该数大的数已经加完了,这时候坐标在它左边的就是一对逆序数。

可是该题另一个问题,就是数字反复的问题。这时候能够在排序的时候让下标大的在前面,这样就能够保证加点的时候下标比他小的数中不会出现反复的。

这题须要注意的是要用__int64。

代码例如以下:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include <set>
#include <algorithm>using namespace std;
#define LL __int64
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1
LL sum[2100000];
struct node
{LL x, id;
} fei[600000];
bool cmp(node x, node y)
{if(x.x==y.x)return x.id>y.id;return x.x>y.x;
}
void PushUp(int rt)
{sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void update(LL x, int l, int r, int rt)
{if(l==r){sum[rt]++;return ;}int mid=l+r>>1;if(x<=mid) update(x,lson);else update(x,rson);PushUp(rt);
}
LL query(int ll, int rr, int l, int r, int rt)
{if(ll<=l&&rr>=r){return sum[rt];}LL ans=0;int mid=l+r>>1;if(ll<=mid) ans+=query(ll,rr,lson);if(rr>mid) ans+=query(ll,rr,rson);return ans;
}
int main()
{int n, i, j;LL ans;while(scanf("%d",&n)!=EOF&&n){memset(sum,0,sizeof(sum));for(i=1; i<=n; i++){scanf("%I64d",&fei[i].x);fei[i].id=i;}sort(fei+1,fei+n+1,cmp);ans=0;for(i=1; i<=n; i++){ans+=query(1,fei[i].id,1,n,1);update(fei[i].id,1,n,1);}printf("%I64d\n",ans);}return 0;
}

POJ 2299 Ultra-QuickSort(线段树+离散化)相关推荐

  1. POJ Mayor's posters——线段树+离散化

    原文:http://blog.163.com/cuiqiongjie@126/blog/static/85642734201261151553308/ 大致题意: 有一面墙,被等分为1QW份,一份的宽 ...

  2. 【POJ 2482】 Stars in Your Window(线段树+离散化+扫描线)

    [POJ 2482] Stars in Your Window(线段树+离散化+扫描线) Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  3. poj 2528 Mayor's posters(线段树+离散化)

    1 /* 2 poj 2528 Mayor's posters 3 线段树 + 离散化 4 5 离散化的理解: 6 给你一系列的正整数, 例如 1, 4 , 100, 1000000000, 如果利用 ...

  4. poj2528贴海报(线段树离散化)

    //poj2528贴海报(线段树离散化) #include<cstring> #include<iostream> #include<cstdio> #includ ...

  5. HDOJ 2492 Ping pong 线段树+离散化

    //2492 Ping pong 线段树+离散化 /* 题意: 有一陀人从左到右排成一排,每个人有一个唯一的技能值,每个人都找其他人比赛, 比赛前要再找一个人做裁判,裁判的技能值不能比这两个人都高,也 ...

  6. POJ - 2299 Ultra-QuickSort(线段树+离散化/归并排序)

    题目链接:点击查看 题目大意:给出n个数字,求使用冒泡排序所需要交换的次数 题目分析:这个题n给到了5e5,如果直接冒泡排序的话,的时间复杂度肯定就TLE了,所以不能直接暴力模拟 我们换个思路,这个题 ...

  7. poj 2482 Stars in Your Window(线段树+离散化+线扫描)

    题目:http://poj.org/problem?id=2482 大意:在一个坐标系中给你n(10^4)个点(点的坐标范围为0<=x,y<2^31),每个点有一个权值,然后给你一个长宽分 ...

  8. POJ - 2528 线段树+离散化

    其实很早就在白书上的常用技巧上 看到离散化的操作,但是之前一直没遇到过需要离散化的题目(应该是我太菜的缘故),所以一直也没怎么重视,下面说说这道题目的考点,也就是离散化. 什么是离散化呢?请先自行百度 ...

  9. poj 2528 Mayor's posters (线段树+离散化)

    /*离散化+线段树由于 数据的输入最大是 10000000 ,直接用开数组肯点会超,所以要将起离散话,首先 ,我们存储输入的边,将其离散化,后面的就和一般的线段树一样可. */#include< ...

最新文章

  1. oracle dbms_output.put不输出
  2. 【深度学习】陶大程等人编写!最新41页深度学习理论综述
  3. PHP在Postman上面进行xdebug的测试
  4. SAP UI5 调试模式标志位的持久化原理 - local storage
  5. 数据结构和算法(06)---二叉树(c++)
  6. python网络爬虫_Python即时网络爬虫:API说明
  7. QEMU 源代码阅读经验开山之作
  8. 二项分布的期望方差证明
  9. Unity制作的照片墙效果
  10. 基础平面设计(文字排版篇)
  11. 开源人物之九:赖霖枫
  12. 连接方法:网线水晶头接法
  13. Excel小笔记——冻结窗格
  14. 读stormzhang的笔记
  15. 让PcShare2005vip免费
  16. 数据结构:实现图书信息管理系统
  17. 【Microsoft Office】无法在所选的更新通道上安装此产品
  18. 慧荣SMI SM3255主控三星Flash芯片专用量产工具SM3255_J0324
  19. android应用开发_2020年排名前五的Android应用开发公司
  20. STM32F0 使用ST-LINK实现对外部Flash芯片的烧录

热门文章

  1. 玩冒险岛java卸载_如何删除冒险岛安装了,现在不想玩
  2. 方法的重载与重写_我们不一样,不一样,重写与重载
  3. flask 启动服务
  4. python 保留的类标识符
  5. 编程语言对比 字面常量
  6. 图解TCPIP-传输层 TCP报文
  7. MongoDB Project Fields
  8. flask.Config(root_path, defaults=None)
  9. matplotlib polar 雷达图
  10. golang |问题代码报go并发死锁