A-Combination Lock  B-School Marks   C-Ice Cave   D-Bad Luck Island   E-Infinite Inversions

E:Infinite Inversions

题意就是有一个序列1,2,3,4。。。。。

现在有n次交换,每次都把ab交换求最终形成的序列的逆序数;

逆序数分为两部分。一部分是交换过位置的,另一部分是没有交换过的。

离散化后,利用树状数组求出交换过的位置的逆序数的个数。

第二部分:

看一个样例:

2

1 6

9 5

得到的序列为6 2 3 4 9 1 7 8 5

首先对于数值6,其下标为1。在区间[1, 6]中,共有6个数。减去该区间中有3个是交换过位置的,则6-3 = 3是数值6对于当前序列所构成的逆序数个数。

对于数值9,下标为5,则在区间[5,9],共有5个数。减去该区间有3个是换过位置的,则逆序数为2。

对于数值1,其下标为6,在区间[1,6]中,~~~~~也有3个逆序数。

……

问题变为求一个区间的中有几个是交换过位置的,其实只要知道其下标的排名。例如下标1的排名为1,下标5排名2,下标6排名3,下标9排名4。

区间[1,6],则是3-1+1 = 3;

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
#define N 2010005
#define INF 0x3f3f3f3f struct node
{
int x, y;
}b[N];
map<int, int>M;
int a[N], cnt, Tree[N], V[N]; int lowbit(int x)
{
return x&(-x);
} void Update(int pos, int num)
{
while(pos<=cnt)
{
Tree[pos]+=num;
pos+=lowbit(pos);
}
} int GetSum(int pos)
{
int s=;
while(pos)
{
s+=Tree[pos];
pos-=lowbit(pos);
}
return s;
} int main()
{
int n;
while(scanf("%d", &n)!=EOF)
{
memset(a, , sizeof(a));
memset(b, , sizeof(b));
memset(V, , sizeof(V));
cnt=;
for(int i=; i<n; i++)
{
scanf("%d %d", &b[i].x, &b[i].y);
a[cnt++]=b[i].x, a[cnt++]=b[i].y;
}
sort(a+, a+cnt);
cnt = unique(a, a+cnt)-a-;
for(int i=; i<=cnt; i++)
M[a[i]]=i, V[i]=i;
for(int i=; i<n; i++)
{
int p=M[b[i].x];
int q=M[b[i].y];
swap(V[p], V[q]);
}
long long ans=;
memset(Tree, , sizeof(Tree));
for(int i=; i<=cnt; i++)
{
int x=V[i];
ans+=(i--GetSum(x));
Update(x, );
}
for(int i=; i<=cnt; i++)
ans+=abs(a[V[i]]-a[i]-V[i]+i);
printf("%lld\n", ans);
}
return ;
}

CF #301 E:Infinite Inversions(逆序数,树状数组)的更多相关文章

  1. POJ 2299 Ultra-QuickSort 逆序数 树状数组 归并排序 线段树

    题目链接:http://poj.org/problem?id=2299 求逆序数的经典题,求逆序数可用树状数组,归并排序,线段树求解,本文给出树状数组,归并排序,线段树的解法. 归并排序: #incl ...

  2. Ultra-QuickSort---poj2299 (归并排序.逆序数.树状数组.离散化)

    题目链接:http://poj.org/problem?id=2299 题意就是求把数组按从小到大的顺序排列,每次只能交换相邻的两个数, 求至少交换了几次 就是求逆序数 #include<std ...

  3. ACM学习历程—HDU5592 ZYB's Premutation(逆序数 && 树状数组 && 二分)(BestCoder Round #65 1003)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5592 题目大意就是给了每个[1, i]区间逆序对的个数,要求复原原序列. 比赛的时候2B了一发. 首先 ...

  4. cdoj 841 休生伤杜景死惊开 逆序数/树状数组

    休生伤杜景死惊开 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 陆伯言军陷八卦 ...

  5. hdu 1394 Minimum Inversion Number 逆序数/树状数组

    Minimum Inversion Number Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showprob ...

  6. zoj 3157 Weapon 逆序数/树状数组

    B - Weapon Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Sta ...

  7. [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)

    [BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...

  8. Dynamic Inversions 50个树状数组

    Dynamic Inversions Time Limit: 30000/15000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others ...

  9. Bzoj 2141: 排队 分块,逆序对,树状数组

    2141: 排队 Time Limit: 4 Sec  Memory Limit: 259 MBSubmit: 1310  Solved: 517[Submit][Status][Discuss] D ...

随机推荐

  1. GPIO 输入—按键检测

    这里要用到一定的模电知识.电容两端电压不能突变,电感两端电流不能突变.这里利用了电容的放电延时实现硬件消抖.按键按下会有抖动,波形有毛刺,使得高低电平显现不明显,而按键按下时,电容放电一下,马上又被充 ...

  2. mysql数据库批量操作

    批量KILL会话: 1.首先,根据条件将查询到要kill的进程写入文件:如:desc information_schema.processlist; SELECT concat('KILL ',id, ...

  3. sort-uniq-cut-join命令练习

    [root@linux Desktop]# cat> fruits.txt banana orange persimmon %%banana apple ORAGE cat> fruits ...

  4. Android基础总结(六)Activity

    创建第二个Activity(掌握) 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> <ac ...

  5. jQuery无刷新分页完整实例代码

    在线演示地址如下: http://demo.jb51.net/js/2015/jquery-wsx-page-style-demo/ <!DOCTYPE html> <head> ...

  6. 分析HTML5中WebSocket的原理

    目录结构   一.什么是Websocket websocket是html5提出的一个协议规范,参考rfc6455. 不过目前还都是在草案,没有成为标准,毕竟html5还在路上. websocket约定 ...

  7. JavaScript有关的10个怪癖和秘密(转)

    数据类型和定义 -------------------------------------------------------------------------------------------- ...

  8. 【BZOJ】1022: [SHOI2008]小约翰的游戏John(博弈论)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1022 好神的博弈论. 题解见dzy的blog:http://dzy493941464.is-prog ...

  9. MySQL的innodb_flush_log_at_trx_commit配置值的设定

    MySQL的innodb_flush_log_at_trx_commit配置值的设定 mysql的配置文件中innodb_flush_log_at_trx_commit的默认值是1,修改成0或者2,速 ...

  10. 解析IE, FireFox, Opera 浏览器支持Alpha透明的方法

    先请看如下代码: filter:alpha(opacity=50);       /* IE */  -moz-opacity:0.5;              /* Moz + FF */  op ...