Bubble Sort

题意:

给你一个1~n的排列,问冒泡排序过程中,数字i(1<=i<=n)所到达的最左位置与最右位置的差值的绝对值是多少

题解:

数字i多能到达的最左位置为min(s[i],i)
i为它的初始位置,s[i]为它的最终位置(因为最后是排好序,这个数是多少,就排在哪个位置,故为s[i])
那最右位置呢?
就是判断数i初始时,右边有多少个数比i小,这个就能用树状数组来求解了
循环从右到左,对于数s[i],我们只需判断它右边1~s[i]-1中有几个数即可

树状数组是从1开始,所以输入尽量也从1开始

代码:

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const int INF=0x3f3f3f3f;
const ll LINF=0x3f3f3f3f3f3f3f3f;
#define PI(A) cout<<(A)<<endl
#define SI(N) cin>>(N)
#define SII(N,M) cin>>(N)>>(M)
#define cle(a,val) memset(a,(val),sizeof(a))
#define rep(i,b) for(int i=0;i<(b);i++)
#define Rep(i,a,b) for(int i=(a);i<=(b);i++)
#define reRep(i,a,b) for(int i=(a);i>=(b);i--)
#define dbg(x) cout <<#x<<" = "<<(x)<<endl
#define PIar(a,n) rep(i,n)cout<<a[i]<<" ";cout<<endl;
#define PIarr(a,n,m) rep(aa,n){rep(bb, m)cout<<a[aa][bb]<<" ";cout<<endl;}
const double EPS= 1e-9 ;/*  /     C o d i n g  S p a c e     /  */const int MAXN= 100000+ 9 ;
int s[MAXN],N,l[MAXN],r[MAXN];//树状数组 范围是[1,n]
int bit[MAXN];
//求前i项和
int SUM(int i)
{int s=0;while(i>0){s+=bit[i];i-=i&-i;}return s;
}
//bit[i]+x
void ADD(int i,int x)
{while(i<=MAXN){bit[i]+=x;i+=i&-i;}
}int main()
{int o;SI(o);Rep(T,1,o){cle(bit,0);int ma=0;SI(N);Rep(i,1,N) SI(s[i]);Rep(i,1,N) l[s[i]]=min(s[i],i);for (int i=N;i>0;i--){r[s[i]]=i+SUM(s[i]-1);ADD(s[i],1);}cout<<"Case #"<<T<<":";Rep(i,1,N) cout<<" "<<abs(l[i]-r[i]);cout<<endl;}return 0;
}

转载于:https://www.cnblogs.com/s1124yy/p/5741411.html

2016 Multi-University Training Contest 4 Bubble Sort(树状数组模板)相关推荐

  1. HDU5775 Bubble Sort树状数组

    题目链接:HDU5775 Bubble Sort Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java ...

  2. HDU - 5775 Bubble Sort(树状数组)

    题目链接:点击查看 题目大意:给出n个数,求出按照冒泡排序期间每个数可以到达的最右边位置和最左边位置的差 题目分析:其实这个题想明白了就很简单了,先用辅助数组a按照顺序存储每一个数,a[i]就代表排序 ...

  3. 【CJOJ2616】 【HZOI 2016】偏序 I(cdq分治,树状数组)

    传送门 CJOJ Solution 考虑这是一个四维偏序对吧. 直接cdq套在一起,然后这题有两种实现方法(树状数组的更快!) 代码实现1(cdq+cdq+cdq) /*mail: mleautoma ...

  4. CF362C Insertion Sort树状数组,思维,枚举

    题意:先交换任意两个,然后只能交换相邻两个,问最少操作次数和方案. 思路:由于冒泡排序有个定理就是逆序数的个数等于最少的交换相邻元素的次数,问题就转换为了交换两个数并且使得整个数组逆序数个数最少,我们 ...

  5. HDU - 5775 - Bubble Sort( 树状数组 + 思维 )

    题目链接:点击进入 题目 题意 问在给出的冒泡排序过程中,一个数到达的最右边位置与最左边位置距离差. 思路 对于一个数,位置 i ,假设右边比它小的数有 r 个,左边比它大的数有 l 个,最右边到达的 ...

  6. 2016 UESTC Training for Data Structures O - 卿学姐种美丽的花 树状数组+等差数列

    O - 卿学姐种美丽的花 Time Limit: 8000/4000MS (Java/Others)     Memory Limit: 125535/65535KB (Java/Others) Su ...

  7. 2016 UESTC Training for Data Structures K - 郭大侠与甲铁城 CDOJ 1342 离线树状数组

    K - 郭大侠与甲铁城 有一个区间,长度1e5,每个点有一种颜色,颜色属于[1,1000],离线询问某个区间的颜色种树,询问次数也少1e5 我的做法是离线树状数组 首先把区间保存下来,按右端点升序排序 ...

  8. 2016 大连网赛---Different GCD Subarray Query(GCD离散+树状数组)

    题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5869 Problem Description This is a simple probl ...

  9. Comet OJ(Contest #8)-D菜菜种菜【树状数组,指针】

    前言 话说昨晚写题的时候贼NMNMNM惊险,最后22秒把程序交了上去竟然过了 正题 题目链接:https://cometoj.com/contest/58/problem/D?problem_id=2 ...

最新文章

  1. java命令--jmap命令使用
  2. ant-design-pro Login 组件 实现 rules 验证
  3. 川大网教计算机文化基础考试题,川大网教计算机文化基础第一次作业统一标准答案.doc...
  4. 《系统集成项目管理工程师》必背100个知识点-36范围变更的遇到的问题
  5. 用setTimeout实现setInterval的功能
  6. CF464E The Classic Problem(主席树+哈希+最短路)
  7. 解析一个C语言俄罗斯方块游戏,包你看了就会
  8. splines | 多项式回归和样条曲线回归
  9. AIAR 应用的高效开发,OPPO 技术开放日第三期圆满落幕!
  10. 大数据分析是如何工作
  11. HCS12XEP100 ADC与SCI2的冲突解决 (2011-4-15)
  12. 最小二乘方法和RANSAC的改进算法PROSAC和LMEDS
  13. xp 计算机配置,xp怎么查看电脑配置
  14. 林志福林玉使林树勋林宝敏林士焜,玉树传芳远,心正永德长;天经地义重,图书翰墨香
  15. java 解析GZIP 和 Deflate 网页源文件
  16. 关于Servlet的两种配置Web.xml文件配置或者使用(@WebServlet(name = ,urlPatterns = ))配置问题——WebServlet注解
  17. c语言商场收款程序,c语言 如何用switch语句编写一个有关商场购物金额优惠的选择程式...
  18. html5统计鼠标点击的次数,怎么实现js统计鼠标点击次数
  19. python朝圣之路-模块篇
  20. [转]IText导出word之页眉页脚页码

热门文章

  1. BeautifulSoup 根据文本内容反查标签
  2. html5 历史管理
  3. vimrc for windows
  4. android 解压版sdk安装的问题
  5. NSIS:超级轻量皮肤SkinH
  6. POJ 2828 Buy Tickets 线段树
  7. 迷难的北京行 – 2012.08.19
  8. 我知道的JavaScript--Json对象扁平化
  9. OpenCV的HSV空间度量与标准HSV不一样,使用的时候需要换算;另附一个调色取色的小工具
  10. linux怎么增加cpu负载,Linux下的CPU平均负载