What Goes Up Must Come Down
题目描述
给定一个序列, 求出将此序列变换为单调递增、单调递减 或者先增后减
样例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;
}
随机推荐
- Codeforces 1113C: Sasha and a Bit of Relax(位运算|异或)
time limit per test: 1 secondmemory limit per test: 256 megabytesinput: standard inputoutput: standa ...
- Anaconda下载与安装
目录 Anaconda下载与安装 开发环境搭建介绍 Anaconda优势 Anaconda安装 测试安装成功 安装好Anaconda界面 如何启动jupyter 启动后新建文件 执行第一个程序 文件的 ...
- rabbitmq-安装部署及基础操作
rabbitmq 官网: https://www.rabbitmq.com/ yum 安装 rabbitmq # centos7 # In /etc/yum.repos.d/rabbitmq.repo ...
- dart系列之:dart代码最佳实践
目录 简介 命名规则 import中的顺序 格式化 总结 简介 每种语言都有自己的代码风格,这种代码风格是跟语言特性息息相关的.如果在编码的过程中遵循这种统一的编码规则,会给我们的业务带来非常多的便利 ...
- .NET 云原生架构师训练营(设计原则&&设计模式)--学习笔记
目录 设计原则 设计模式 设计原则 DRY (Don't repeat yourself 不要重复) KISS (Keep it stupid simple 简单到傻子都能看懂) YAGNI (You ...
- Zookeeper基础教程(一):认识Zookeeper
引用百度百科的话 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服 ...
- RabbitMQ基础教程系列
Ubuntu16.04下,erlang安装和rabbitmq安装步骤 Ubuntu16.04下,rabbimq集群搭建 C# .net 环境下使用rabbitmq消息队列 .net core使用rab ...
- Nginx入门--从核心配置与动静分离开始
写在前面 优化我们项目,服务器部署,不仅仅可以是分布式,Nginx一样可以通过动静分离,负载均衡来减轻我们服务器的压力.Nginx的知识链,学习周期相对比较长,博主也是刚刚入门,这篇就先从实现基础的动 ...
- python日志按天分割,保存近一个月日志,日志自动清理
python日志按天分割,保存近一个月日志 import os import logging import re from logging.handlers import TimedRotatingF ...
- centos7 date时间命令
date "+%F %T" %F full date; same as %Y-%m-%d --相当于年月日格式 %T time; same as %H:%M:%S ...