首先考虑快排的递归什么时候停下,显然是当前段只剩下一个数了,也就是一个数两边出现分隔符

然后再考虑计算冒泡长度这个操作,因为有分割,所以我们可以把这些放到一起冒泡,这和递归每个区间冒泡是等价的

所以答案就是一个数被动了几次,也就是他两边的分隔符出现的最晚时间

在冒泡排序中,每次冒泡,一个数如果前面有比他大的,就会往前面动一步 否则就会往后移到第一个比他大的那个数的前面

所以分隔符i出现的时间就是最右的小于i的数的位置到i的距离

然后直接计算答案即可

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100005;
long long n,f[N],g[N],mx,ans;
struct qwe
{
int v,id;
}a[N];
bool cmp(const qwe &a,const qwe &b)
{
return a.v<b.v||(a.v==b.v&&a.id<b.id);
}
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
a[i].v=read(),a[i].id=i;
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++)
f[i]=a[i].id;
for(int i=1;i<=n;i++)
g[i]=max(1ll,mx-i+1),mx=max(mx,f[i]);
g[n+1]=1;
for(int i=1;i<=n;i++)
ans+=max(g[i],g[i+1]);
printf("%lld\n",ans);
return 0;
}

bzoj 5277: [Usaco2018 Open]Out of Sorts【冒泡排序瞎搞】的更多相关文章

  1. BZOJ 1047: [HAOI2007]理想的正方形 单调队列瞎搞

    题意很简明吧? 枚举的矩形下边界和右端点即右下角,来确定矩形位置: 每一个纵列开一个单调队列,记录从 i-n+1 行到 i 行每列的最大值和最小值,矩形下边界向下推移的时候维护一下: 然后在记录的每一 ...

  2. bzoj 1049: [HAOI2006]数字序列【dp+二分+瞎搞】

    第一问明显就是用b[i]=a[i]-i来做最长不下降子序列 然后第二问,对于一对f[i]=f[j]+1的(i,j),中间的数一定要改的,并且是等于b[i]或者b[j],我不会证,然后因为是随机数据,所 ...

  3. bzoj 303: [CQOI2009]中位数图【前缀和+瞎搞】

    处理出一个序列c,a[i]>b,c[i]=1;a[i]==b,c[i]=0;a[i]<b,c[i]=-1,然后s为c的前缀和,设w为b在a序列里的下标 注意到子序列一定横跨w,并且一个符合 ...

  4. bzoj 1603: [Usaco2008 Oct]打谷机【瞎搞】

    一棵树,碰到改变转向的边就异或一下,从1dfs一遍 #include<iostream> #include<cstdio> using namespace std; const ...

  5. bzoj 3580 冒泡排序 乱搞+思维

    冒泡排序 Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 243  Solved: 108[Submit][Status][Discuss] Descr ...

  6. BZOJ 5277 IQ题orz

    思路: 首先我们注意到,对一个序列按分割点分开以后分别冒泡其实就相当于对整个序列进行冒泡.每一个元素都会对复杂度贡献1,除非一个元素两边的分割点都出现了.因此我们可以完全忽略快排的递归过程.只需考虑每 ...

  7. [bzoj5278][Usaco2018 Open]Out of Sorts

    有点厉害,,,不会啊 答案就是所有前i个数有多少不在前i个里的max? 为啥啊求助

  8. bzoj 5281 [Usaco2018 Open]Talent Show——0/1分数规划

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5281 把分子乘1000,就能在整数里做了. 这种水题也花了这么久…… #include< ...

  9. bzoj 5195: [Usaco2018 Feb]Directory Traversal【树形dp】

    注意到目录是一颗树结构,然后就简单了,预以1为根的处理出dis[u]为以这个点为根,到子树内的目录总长,si为子树内叶子数 第二遍dfs换根即可 #include<iostream> #i ...

随机推荐

  1. mysql 常用管理命令

    常见的管理mysql命令 (1)用于选择在MySQL工作区指定的数据库(选择数据库): USE Databasename; (2)列出了MySQL数据库管理系统中的所有可访问的数据库: SHOW DA ...

  2. Tomcat错误信息(服务器版本号)泄露(低危)

    一.问题描述Tomcat报错页面泄漏Apache Tomcat/7.0.52相关版本号信息,是攻击者攻击的途径之一.因此实际当中建议去掉版本号信息. 二.解决办法 1.进入到tomcat/lib目录下 ...

  3. Java 函数式接口 lambda

    import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class Demo1 { ...

  4. easyshell 安装

    EasyShell是一个可以直接在Eclipse IDE中打开shell窗口的工具,在shell中运行选中的文件,打资源管理. 百度经验:jingyan.baidu.com 工具/原料 Easy_Sh ...

  5. DELPHI7调用BERLIN中间件的中文字段名乱码的解决办法

    MSSQL数据库的表使用中文字段名,BERLIN开发的DATASNAP中间件,DELPHI7调用中间件的查询方法返回数据给CLIENTDATASET.DATA,发现中文字段名乱码,中文字段名的值可以正 ...

  6. dubbo-admin安装和使用

    更新下链接,不知道是不是这个项目合入Apache的缘故,链接都变成了https://github.com/apache/incubator-dubbo/ 按照常理,直接去 https://github ...

  7. Client使用c#和odp.net连接server oracle

    http://blog.csdn.net/educast/article/details/6605655 Oracle.DataAccess.dll有2.X版本和4.X版本,VS2008开发用2.X ...

  8. ubuntu安装ftp环境

    ubuntu安装ftp环境 安装: apt install vsftpd 启动: service vsftpd start 查看状态: service vsftpd status root登录: vi ...

  9. ubuntu重新启动网卡

    1.关闭接口:sudo ifconfig eth0 down 2.然后打开:sudo ifconfig eth0 up

  10. [Unity-22] Coroutine协程浅析

    1.概念解释 协程并非一个独立的线程.在Unity中.全部的语句都是在一个线程中运行的,也就是说.Unity是单线程的(详细的能够參见http://blog.csdn.net/alexander_xf ...