题意根据题目中给的冒泡排序写出每个元素交换过程中该元素位置左右最大差距;

分析:因为题目中冒泡程序从后向前遍历的,假设第i个元素左边有k个比i小的数,那么i必定会向右移动k位,我们用k1记住i+k,用k2记住i最终移到的位置a[i],用k3记住i的初始位置i,那么左右的最大值和最小值一定在k1,k2,k3中产生,此处不做证明,自己可以仔细想想。

现在主要问题在于寻找第i位置的左区间有几个比a[i]大的就可以了,解决办法:用线段树的节点储存次在节点左右区间的a[i]的个数,初始化为0,从a[n]到a[1]查询(1,a[i]-1)区间的数的个数,在把a[i]扔到线段树中更新就可以了。

代码如下:

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <map>
#include <string.h>
#include <algorithm>
#define LL long long
using namespace std;
const int N=100010;
int g[4*N];
void creat(int k,int l,int r)
{
if(l==r)
{
g[k]=0;
return ;
}
int mid=(l+r)/2;
creat(k<<1,l,mid);
creat(k<<1|1,mid+1,r);
g[k]=0;
}
int finds(int k,int l,int r,int L,int R)
{
if(l>=L&&r<=R)
{
return g[k];
}
int mid=(l+r)/2;
int k1=0,k2=0;
if(mid>=L)
{
k1=finds(k<<1,l,mid,L,R);
}
if(mid<R)
{
k2=finds(k<<1|1,mid+1,r,L,R);
}
return k1+k2;
}
void updata(int k,int l,int r,int x)
{
if(l==r&&l==x)
{
g[k]=1;
return ;
}
int mid=(l+r)/2;
if(x<=mid)
{
updata(k<<1,l,mid,x);
g[k]+=1;
}
if(x>mid)
{
updata(k<<1|1,mid+1,r,x);
g[k]+=1;
}
return ;
}
int main()
{
int t,n,i,j,h=1,b[N],a[N],c[N];
cin>>t;
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
creat(1,1,n);
for(i=n;i>0;i--)
{
if(a[i]==1)
b[i]=0;
else
b[i]=finds(1,1,n,1,a[i]-1);
updata(1,1,n,a[i]);
}
printf("Case #%d: ",h++);
for(i=1;i<=n;i++)
{
int k1=b[i]+i;
int k2=i;
int k3=a[i]; c[a[i]]=max(max(k1,k2),k3)-min(min(k1,k2),k3);
}
for(i=1;i<=n;i++)
{
if(i==n)
printf("%d",c[i]);
else
printf("%d ",c[i]);
}
printf("\n");
}
return 0;
}

  

多校hdu-5775 Bubble sort(线段树)的更多相关文章

  1. HDU 5775 Bubble Sort(线段树)(2016 Multi-University Training Contest 4 1012)

    原址地址:http://ibupu.link/?id=31 Problem Description P is a permutation of the integers from 1 to N(ind ...

  2. HDU 5775 Bubble Sort(冒泡排序)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  3. HDU 5775 Bubble Sort (线段树)

    Bubble Sort 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 Description P is a permutation of t ...

  4. hdu 5775 Bubble Sort 树状数组

    Bubble Sort 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 Description P is a permutation of t ...

  5. 【归并排序】【逆序数】HDU 5775 Bubble Sort

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 题目大意: 冒泡排序的规则如下,一开始给定1~n的一个排列,求每个数字在排序过程中出现的最远端 ...

  6. HDU 5775 Bubble Sort

    对于一个数,可以记录3个位置:初始位置,终点位置,最右边的位置. 初始位置和终点位置容易计算.最多边的位置即为初始状态下该数的位置+该数之后还有多少数比该数小. 三个位置中的min即为leftpos, ...

  7. HDU 5775:Bubble Sort(树状数组)

    http://acm.hdu.edu.cn/showproblem.php?pid=5775 Bubble Sort Problem Description   P is a permutation ...

  8. hdu 5700区间交(线段树)

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  9. 2016暑假多校联合---Rikka with Sequence (线段树)

    2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...

随机推荐

  1. 关于OCR,一些想法

    OCR一般分为两种: 1,根据给定的字符特征集合,提取未知字符的特征进行匹配识别:(典型例子:GOCR) 2,不知道字符特征,但给出提取特征的规则,通过机器学习training来获取某个字符集的特征集 ...

  2. PMP杂谈--项目组织,矩阵组织,职能型组织,复合型组织

    (1)项目组织的优缺点:优:项目经理权力大:缺:解散时焦虑.没有提拔权力,不利于专业技术积累,设备反复.难以保证资源的充分利用. (2)矩阵组织的优缺点:优:资源利用率高,横向信息沟通.项目经理权力提 ...

  3. 百度地图二次开发Demo

    单点标注:电子显示对应位置的图片,信息框 多点标注(批量点标注): 多点连线(基于多个点形成路径): 若须要Demo源码:请给我发邮箱 1507026255@qq.com 转载请注明小刘

  4. 使用Volley缓存图片时,缓存无效的原因。

    使用Volley的ImageLoader异步获取并缓存图片时,发现有的网络图片已经缓存了,可是断网后却读不出来. ImageLoader的用法: RequestQueue requestQueue = ...

  5. PowerDesigner之设置(2)——扩展属性

    数据库:SQL2000 PD版本:16 在PowerDesigner之设置(1)中,创建表的表头注释部分由于中文的原因无法定长,这里我们用PD的扩展方法来解决. 具体方法如下: 主菜单DataBase ...

  6. JavaScript基础深入之

    JS的数值类型是分为两类:基本数据类型和引用数据类型. 基本类型占据的内存栈空间,引用类型被保存在堆空间.引用类型赋值的变量也是被保存在栈空间的,它的作用类似于电视遥控器,负责操作堆空间内指向的对象. ...

  7. Jsp页面截取字符串

    用jstl标签: 首先页面中引入<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions ...

  8. CRM客户关系管理系统-需求概设和详设

    大概设计 大概设计就是对需求进行一个整体性分析,把需要实现的功能都列出来,对于客户关系管理系统,我们需要从角色出发,从而确定有哪些需求,最好是画个思维导图 首先我们是为培训学校这么一个场景来开发的,所 ...

  9. jQuery解决鼠标单双击问题

    html代码如下: <button>点击</button> JQ代码如下: <script> $(function () { // 编写相关jQuery代码 // ...

  10. 20170411 debug窗口执行文件

    [FUNCTION] Command=/H Title=Debugger Type=SystemCommand