\(\\\)

\(Description\)


运行以下代码对一长为\(N\)的数列\(A\)排序,不保证数列元素互异:

cnt = 0
sorted = false
while (not sorted):
cnt = cnt + 1
sorted = true
for i = 0 to N-2:
if A[i+1] < A[i]: swap A[i], A[i+1]
for i = N-2 downto 0:
if A[i+1] < A[i]: swap A[i], A[i+1]
for i = 0 to N-2:
if A[i+1] < A[i]: sorted = false

求退出循环后\(cnt\)的值。

  • \(N\in [0,10^5]\),\(A_i\in [0,10^9]\)

\(\\\)

\(Solution\)


  • 求双向冒泡排序操作次数就没有\(silver\)那道题那么简单了,因为向前移动的瓶颈被去掉了,而换做局部的移动限制。

  • 转化问题。设\(t_i\)表示将区间\([1,i]\)变为排序后状态的最少操作次数,那么答案即为\(max\{t_i\}\)。设\(s_i\)为排序后在\([1,i]\)中而原数列里不在\([1,i]\)的元素个数,可以证明\(s_i=t_i\)。因为双向冒泡排序可以保证,每次循环将当前未归位的最大元素和未归位的最小元素归位,所以对于一个没有完成排序的前缀区间,每次会将一个不应在该区间里的元素移出,将一个应该在改区间却原来不在的元素归位。

  • 具体实现可以对下标开树状数组,将排序后的数列按顺序插入每个元素的初始位置,用总个数减前缀和或后缀和的方式查询即可。

\(\\\)

\(Code\)


#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 100010
#define R register
#define gc getchar
using namespace std; inline int rd(){
int x=0; bool f=0; char c=gc();
while(!isdigit(c)){if(c=='-')f=1;c=gc();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();}
return f?-x:x;
} int n,ans=1;
struct seq{int x,p;}s[N]; struct BIT{
int c[N];
inline int lowbit(int x){return x&-x;}
inline void add(int p){for(;p<=n;p+=lowbit(p)) ++c[p];}
inline int sum(int p){
int res=0;
for(;p;p-=lowbit(p)) res+=c[p];
return res;
}
}bit; inline bool cmp(seq x,seq y){
return x.x==y.x?x.p<y.p:x.x<y.x;
} int main(){
n=rd();
for(R int i=1;i<=n;++i){s[i].x=rd();s[i].p=i;}
sort(s+1,s+1+n,cmp);
for(R int i=1;i<=n;++i){
bit.add(s[i].p);
ans=max(ans,i-bit.sum(i));
}
printf("%d\n",ans);
return 0;
}

[ USACO 2018 OPEN ] Out of Sorts (Gold)的更多相关文章

  1. [ USACO 2018 OPEN ] Out of Sorts (Platinum)

    \(\\\) \(Description\) 对一长为\(N\)的数列\(A\)排序,不保证数列元素互异: 数列\(A\)中\(A[1...i]\)的最大值不大于\(A[i+1-N]\)的最小值,我们 ...

  2. [ USACO 2018 OPEN ] Out of Sorts (Silver)

    \(\\\) \(Description\) 运行以下代码对一长为\(N\)的数列\(A\)排序,不保证数列元素互异: cnt = 0 sorted = false while (not sorted ...

  3. 【二分+拓扑排序】Milking Order @USACO 2018 US Open Contest, Gold/upc_exam_6348

    目录 Milking Order @USACO 2018 US Open Contest, Gold/upc_exam_6348 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 MEA ...

  4. [USACO 2018 Feb Gold] Tutorial

    Link: USACO 2018 Feb Gold 传送门 A: $dp[i][j][k]$表示前$i$个中有$j$个0且末位为$k$的最优解 状态数$O(n^3)$ #include <bit ...

  5. [USACO 2018 Jan Gold] Tutorial

    Link: USACO 2018 Jan Gold 传送门 A: 对于不同的$k$,发现限制就是小于$k$的边不能走 那么此时的答案就是由大于等于$k$的边形成的图中$v$所在的连通块除去$v$的大小 ...

  6. [USACO 2018 Open Contest]作业总结

    t1-Out of Sorts 题目大意 将最大的数冒泡排序到最后需要多少次操作. 分析 排序后判断距离. ac代码 #include<bits/stdc++.h> #define N 1 ...

  7. [USACO 2018 Open Gold] Tutorial

    Link: 传送门 A: 对于每一条分割线,设本不应在其左侧的个数为$x$ 重点要发现每次一来一回的操作恰好会将一对分别应在左/右侧的一个数从右/左移过去 这样就转直接用树状数组求出最大的$x$即可 ...

  8. 【杂题1】USACO 2018 Open Contest-练习

    https://www.xoj.red/contests/show/1231 下面会写一些题目的解析什么的,当然不会粘贴题目只是简单提一下 (部分题目简单的题目就不概括了) 其实难度应该前面比较低. ...

  9. [LOJ#2386]. 「USACO 2018.01 Platinum」Cow at Large[点分治]

    题意 题目链接 分析 假设当前的根为 rt ,我们能够在奶牛到达 \(u\) 之时拦住它,当且仅当到叶子节点到 \(u\) 的最短距离 \(mn_u \le dis_u\) .容易发现,合法的区域是许 ...

随机推荐

  1. 【Codeforces 442B】Andrey and Problem

    [链接] 我是链接,点我呀:) [题意] n个朋友 第i个朋友帮你的概率是pi 现在问你恰好有一个朋友帮你的概率最大是多少 前提是你可以选择只问其中的某些朋友不用全问. [题解] 主要思路是逆向思维, ...

  2. 布局(codevs 1242)

    题目描述 Description 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些.FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食.奶牛排在队伍中的顺序和它们 ...

  3. spring-quartz定时器简单用法

    基本配置: 1.quartz.properties #============================================================== #Configure ...

  4. Choose and divide

    The binomial coefficient C(m, n) is defined as C(m, n) = m! (m − n)! n! Given four natural numbers p ...

  5. The Pilots Brothers' refrigerator DFS+枚举

    Description The game “The Pilots Brothers: following the stripy elephant” has a quest where a player ...

  6. 最小生成树 D - Constructing Roads

    There are N villages, which are numbered from 1 to N, and you should build some roads such that ever ...

  7. SystemTapでMySQL 5.5のDisk I/Oを分析する

    http://d.hatena.ne.jp/sh2/20111121 2010年1月の記事SystemTapでMySQLのDisk I/Oを分析するの続きです.以前作成したSystemTapスクリプト ...

  8. Android利用Volley异步载入数据完整具体演示样例(二)

    MainActivity例如以下: package cc.y; import android.app.Activity; import android.content.Context; import ...

  9. 【翻译自mos文章】将expdp的dmp文件从asm磁盘组里边放到本地文件系统里边

    将expdp的dmp文件从asm磁盘组里边放到本地文件系统里边 參考原文: How To Extract Datapump File From ASM Diskgroup To Local Files ...

  10. Index statistics collected bug

    SQL运行引擎会从pg_stats.pg_class等相关系统字典表.视图获取生成最佳运行计划的数据,假设相关字典视图的数据不准确就没有办法生成良好的运行计划. 发现下面Bug一枚. 0. 插入数据之 ...