跳转链接

题目描述

给定一个序列, 求出将此序列变换为单调递增单调递减 或者先增后减

样例1

输入
7
3 1 4 1 5 9 2
输出
3

样例2

输入
9
10 4 6 3 15 9 1 1 12
输出
8

分析

本题相当于是有一个峰值, 峰值两边的都单调递减

我们可以用树状数组求出对于所有的数字处于峰值左边或者右边所需要的交换次数

对于这两种情况取一个最小值即可

CODE

#include <iostream>
#define lowbit(i) i & -i
#define mset(a) for(int i = 0; i <= px; i ++ ) a[i] = 0 using namespace std; const int N = 1e5 + 10; int n, px;
int a[N], tr[N], cnt[N]; void add(int x) {
for(int i = x; i <= px; i += lowbit(i) ) tr[i] ++;
} int sum(int x) {
int ans = 0;
for(int i = x; i; i -= lowbit(i)) ans += tr[i];
return ans;
} int main() {
ios::sync_with_stdio(false), cin.tie(0);
cin >> n;
for(int i = 1; i <= n; i ++ ) {
cin >> a[i];
px = max(a[i], px);
} for(int i = 1; i <= n; i ++ ) {
cnt[i] = sum(px) - sum(a[i]);
add(a[i]);
}
mset(tr);
for(int i = n; i; i -- ) {
cnt[i] = min(sum(px) - sum(a[i]), cnt[i]);
add(a[i]);
}
long long ans = 0;
for(int i = 1; i <= n; i ++ ) ans += cnt[i];
cout << ans << endl;
return 0;
}

随机推荐

  1. [Elasticsearch] ES聚合场景下部分结果数据未返回问题分析

    背景 在对ES某个筛选字段聚合查询,类似groupBy操作后,发现该字段新增的数据,聚合结果没有展示出来,但是用户在全文检索新增的筛选数据后,又可以查询出来, 针对该问题进行了相关排查. 排查思路 首 ...

  2. JS中常见的几种控制台台报错

    Error 控制台报错 EvalError 全局错误RangeError 引用错ReferenceError 参数错误SyntaxError 语法错误TypeError 类型错误URIError 编码 ...

  3. Eclipse启动SpringCloud微服务集群的方法

    1.说明 下面这篇文章介绍了Eureka Server集群的启动方法, SpringCloud创建Eureka模块集群 是通过jar包启动时指定配置文件的方式实现的. 现在只有Eureka Serve ...

  4. C# double类型精度丢失问题

    我们先看一段代码,可以在控制台程序中执行看看结果 { double d = 500; double d1 = 233.84; double d2 = d - d1; //d2=266.15999999 ...

  5. python + pymysql连接数据库报“(2003, "Can't connect to MySQL server on 'XXX数据库地址' (timed out)")”

    python + pymysql连接数据库报"(2003, "Can't connect to MySQL server on 'XXX数据库地址' (timed out)&quo ...

  6. nginx - win系统启动一闪而过 ,服务没有启动成功

    这种现象是因为配置文件里配置的服务监听端口被占了

  7. [ python应用 ] python递归搜索文件,支持搜索多个文件,支持自定义处理动作

    写了一个PyQT界面的版本:https://github.com/LongchuanYu/pyqt_project PATH = r'E:\MyDocument\新しいフォルダー\' # 要搜索的目录 ...

  8. js监听网页页面滑动滚动事件,实现导航栏自动显示或隐藏

    /** * 页面滑动滚动事件 * @param e *///0为隐藏,1为显示var s = 1;function scrollFunc(e) { // e存在就用e不存在就用windon.event ...

  9. CentOS7 安装mysql并解决安装慢的问题

    0.centOS7 mini版安装及网络配置 //可从我的网盘保存下载,可用虚拟机安装 链接:https://pan.baidu.com/s/10_AHxN0DtJ75s1oFOaaZ3A 密码:ud ...

  10. spring cloud Zuul 多层拦截 --- 心得

    1.前言 根据教材.博客文章的实例实操,基本都是单层拦截,没有找到多层拦截的具体写法 ,让我走了很多弯路,我将其写在这里,以待以后参考. 2.环境 spring boot : 2.1.6.RELEAS ...