题面

看不懂?!

大概的意思就是:

给出一个长度为n的序列,然后每次只能交换相邻的两个数,问最小需要几次使序列**严格上升 **

不断读入n,直到n=0结束

思路:

交换相邻的两个数,这不就类似冒泡排序吗?但是n<500000

算了吧,我回去颓A+B

于是我们就发现用冒泡排序直接计算次数是行不通的

但我们要知道:

冒泡排序的交换次数就是序列的逆序对数!!!

所以——就简单了吧~

如何求逆序对?

较easy版的逆序对

1、归并排序

思想是分治法

不断划分为两小段

然后依次由小序列合并为大序列,同时求出逆序数

2、树状数组

因为树状数组的修改查询是log级的所以可以使用(前缀和的方法),没学的建议先去学习一下,不是很难

Code:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
int x,i;
}a[500010];
int n;
int b[500010];
int f[500010];
ll ans;
int read()
{
int s=0;
char c=getchar();
while(!isdigit(c))
c=getchar();
while(isdigit(c))
{
s=(s<<1)+(s<<3)+c-'0';
c=getchar();
}
return s;
}
void update(int x)//修改
{
for(;x<=n;x+=x&(-x))
f[x]++;
return;
}
ll sum(int x)//求前缀和
{
ll res=0;
for(;x;x-=x&(-x))
res+=f[x];
return res;
}
bool cmp(node a,node b)
{
return a.x>b.x;
}
int main()
{
int i,j;
n=read();
while(n)
{
ans=0;
memset(f,0,sizeof(f));
for(i=1;i<=n;i++)
{
a[i].x=read();
a[i].i=i;
}
sort(a+1,a+n+1,cmp);
for(i=1;i<=n;i++)//先hash一下,按数值给其标记,方便后面求逆序对
b[a[i].i]=i;
for(i=1;i<=n;i++)
{
update(b[i]);//一步一做
ans+=sum(b[i]-1);
}
printf("%lld\n",ans);
n=read();
}
return 0;
}

「UVA10810」Ultra-QuickSort 解题报告的更多相关文章

  1. 「FJOI2016」神秘数 解题报告

    「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就 ...

  2. 「ZJOI2016」大森林 解题报告

    「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操 ...

  3. 「SCOI2016」背单词 解题报告

    「SCOI2016」背单词 出题人sb 题意有毒 大概是告诉你,你给一堆n个单词安排顺序 如果当前位置为x 当前单词的后缀没在这堆单词出现过,代价x 这里的后缀是原意,但不算自己,举个例子比如abc的 ...

  4. 「NOI2015」寿司晚宴 解题报告

    「NOI2015」寿司晚宴 这个题思路其实挺自然的,但是我太傻了...最开始想着钦定一些,结果发现假了.. 首先一个比较套路的事情是状压前8个质数,后面的只会在一个数出现一次的再想办法就好. 然后发现 ...

  5. 「SCOI2015」国旗计划 解题报告

    「SCOI2015」国旗计划 蛮有趣的一个题 注意到区间互不交错,那么如果我们已经钦定了一个区间,它选择的下一个区间是唯一的,就是和它有交且右端点在最右边的,这个可以单调队列预处理一下 然后往后面跳拿 ...

  6. 「JLOI2015」骗我呢 解题报告?

    「JLOI2015」骗我呢 这什么神仙题 \[\color{purple}{Link}\] 可以学到的东西 对越过直线的东西翻折进行容斥 之类的..吧? Code: #include <cstd ...

  7. 「JLOI2015」城池攻占 解题报告

    「JLOI2015」城池攻占 注意到任意两个人的战斗力相对大小的不变的 可以离线的把所有人赛到初始点的堆里 然后做启发式合并就可以了 Code: #include <cstdio> #in ...

  8. 「JLOI2015」管道连接 解题报告

    「JLOI2015」管道连接 先按照斯坦纳树求一个 然后合并成斯坦纳森林 直接枚举树的集合再dp一下就好了 Code: #include <cstdio> #include <cct ...

  9. 「JLOI2015」战争调度 解题报告

    「JLOI2015」战争调度 感觉一到晚上大脑就宕机了... 题目本身不难,就算没接触过想想也是可以想到的 这个满二叉树的深度很浅啊,每个点只会和它的\(n-1\)个祖先匹配啊 于是可以暴力枚举祖先链 ...

  10. 「SHOI2014」三叉神经树 解题报告

    「SHOI2014」三叉神经树 膜拜神仙思路 我们想做一个类似于动态dp的东西,首先得确保我们的运算有一个交换律,这样我们可以把一长串的运算转换成一块一块的放到矩阵上之类的东西,然后拿数据结构维护. ...

随机推荐

  1. Python基础:常用函数

    1:enumerate enumerate(sequence, start=0) 该函数返回一个enumerate对象(一个迭代器).其中的sequence参数可以是序列.迭代器或者支持迭代的其他对象 ...

  2. 【CSS3】纯CSS3制作页面切换效果

    此前写的那个太复杂了,来点简单的核心 <html> <head> <title></title> <style type="text/c ...

  3. 上传图片保存到MySql数据库并显示--经验证有效

    以下方法仅供参考,只是介绍下这一种方法而已.欢迎指正!! 前台(image.html):  1<html> 2<head> 3<title>上传图片</tit ...

  4. JavaScript 字符串转为数字

    js中字符串转为数字主要4种,分别为转换函数,强制转换,js变量弱类型转换,正则表达式. 1.转换函数 JS中提供了两个转换函数parseInt()和parseFloat(),parseInt()将值 ...

  5. Pytorch 多 GPU 并行处理机制

    Pytorch 的多 GPU 处理接口是 torch.nn.DataParallel(module, device_ids),其中 module 参数是所要执行的模型,而 device_ids 则是指 ...

  6. Python--day48--ORM框架SQLAlchemy之子查询

    一定要把第一次查询的结果作为一个结果再进行查询:代码后面加.subquery()标明是子查询 1,简单的子查询 #select * from (select * from tb) as B q1 = ...

  7. H3C PPP会话流程

  8. Python--day41--线程池--python标准模块concurrent.futures

    1,线程池代码示例:(注:进程池的话只要将以下代码中的ThreadPoolExecutor替换成ProcessPoolExecutor即可,这里不演示) import time from concur ...

  9. 手机web页面调用手机QQ实现在线聊天的效果

    html代码如下: <a href="javascript:;" onclick="chatQQ()">QQ咨询</a> js代码如下: ...

  10. 2018-8-10-如何在-UWP-使用-wpf-的-Trigger-

    title author date CreateTime categories 如何在 UWP 使用 wpf 的 Trigger lindexi 2018-08-10 19:16:51 +0800 2 ...