Gym - 102082G What Goes Up Must Come Down (树状数组+贪心)
题意:有一个长度为n的序列,你每次可以选择两个相邻的元素交换,求把这个序列排成单峰序列的最少交换次数。
方法一:将元素按数值从大到小排序(保存原来的位置),把最大的插在中间,剩下的依次往两边放,依次考虑每个数该放在左边还是右边,只考虑后加入的数对已有的数的贡献。由于前面加入的数的次序对后加入的数无影响,因此贪心地选择贡献小的一边就行了。贡献为重排后下标的逆序数,注意大小相同的要特殊处理一下就行了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+;
struct D {
int x,y;
bool operator<(const D& b)const {return x>b.x;}
} a[N];
int c[N],n;
int lb(int x) {return x&-x;}
void add(int u,int x) {for(; u<N; u+=lb(u))c[u]+=x;}
int get(int u) {int ret=; for(; u; u-=lb(u))ret+=c[u]; return ret;}
int main() {
scanf("%d",&n);
for(int i=; i<n; ++i)scanf("%d",&a[i].x),a[i].y=i+;
sort(a,a+n);
ll ans=;
for(int i=,j,k; i<n; i=j) {
for(j=i; j<n&&a[j].x==a[i].x; ++j);
for(k=i; k<j; ++k) {
int t=get(a[k].y);
ans+=min(t,i-t);
}
for(k=i; k<j; ++k)add(a[k].y,);
}
printf("%lld\n",ans);
return ;
}
方法二:通过观察可以发现:
1.把一个元素通过相邻交换的方式移动到其他地方,其他元素的相对位置不变
2.对于单峰序列,比某个元素大的数必定都在该元素的同侧
因此,对于每个元素而言,要么把它左边比它大的元素都移到右边去,要么把它右边比它大的元素都移到左边来,因此每个元素对答案的贡献为min(左边比它大的元素数,右边比它大的元素数),树状数组左右各扫一遍就行了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+;
int L[N],R[N],c[N],n,a[N];
int lb(int x) {return x&-x;}
void add(int u,int x) {for(; u<N; u+=lb(u))c[u]+=x;}
int get(int u) {int ret=; for(; u; u-=lb(u))ret+=c[u]; return ret;}
int main() {
scanf("%d",&n);
for(int i=; i<n; ++i)scanf("%d",&a[i]);
for(int i=; i<n; ++i)L[i]=i-get(a[i]),add(a[i],);
memset(c,,sizeof c);
for(int i=n-; i>=; --i)R[i]=n--i-get(a[i]),add(a[i],);
ll ans=;
for(int i=; i<n; ++i)ans+=min(L[i],R[i]);
printf("%lld\n",ans);
return ;
}
Gym - 102082G What Goes Up Must Come Down (树状数组+贪心)的更多相关文章
- Codeforces Gym 100114 H. Milestones 离线树状数组
H. Milestones Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descripti ...
- Gym 101908C - Pizza Cutter - [树状数组]
题目链接:https://codeforces.com/gym/101908/problem/C 题意: 一块正方形披萨,有 $H$ 刀是横切的,$V$ 刀是竖切的,不存在大于等于三条直线交于一点.求 ...
- Codeforces Gym 100269F Flight Boarding Optimization 树状数组维护dp
Flight Boarding Optimization 题目连接: http://codeforces.com/gym/100269/attachments Description Peter is ...
- gym 102082G BZOJ4240 贪心+树状数组
4240: 有趣的家庭菜园 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 756 Solved: 349[Submit][Status][Discu ...
- Gym 100463A Crossings (树状数组 逆序对)
Crossings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463 Description ...
- Gym 100960G (set+树状数组)
Problem Youngling Tournament 题目大意 给一个序列a[i],每次操作可以更改一个数,每次询问 将序列排序后有多少个数a[i]>=sum[i-1]. n<=10^ ...
- Gym - 101350F Monkeying Around(线段树+树状数组)
When the monkey professor leaves his class for a short time, all the monkeys go bananas. N monkeys a ...
- Gym - 101755G Underpalindromity (树状数组)
Let us call underpalindromity of array b of length k the minimal number of times one need to increme ...
- Gym - 100269F Flight Boarding Optimization(dp+树状数组)
原题链接 题意: 现在有n个人,s个位置和你可以划分长k个区域你可以把s个位置划分成k个区域,这样每个人坐下你的代价是该区域内,在你之前比你小的人的数量问你怎么划分这s个位置(当然,每个区域必须是连续 ...
随机推荐
- 【Web】jquery合并单元格
合并单元格的情况,在开发中还是比较多见的,以下仅介绍合并行的情况. 原来的table效果 效果如下: 代码如下: <!DOCTYPE html> <html xmlns=" ...
- 阿里云Zabbix安装实践过程
1.配置阿里云zabbix yum源 [root@VM_0_8_centos ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhe ...
- U盘安装Ubuntu Server CD-ROM挂载失败
U盘安装 Ubuntu Server 发生Failed to copy file from CD-ROM问题 使用UltraISO制作Ubuntu Server安装盘,在安装过程中出现[!!] Loa ...
- python中True,False与0,1之间的关系
demo1 >>> print(True == 1) >>> print(True == 2) >>> print(False == 0) > ...
- web题
@php绕过https://www.cnblogs.com/leixiao-/p/9786496.html @step1:F12 step2:抓包 @任何url http://118.25.14.4 ...
- NOIp2015D1T3 斗地主【暴搜】
题目传送门 刚开始读到题目的时候,非常懵逼,非常崩溃,写着写着呢,也有点崩溃,细节有点多. 这个做法呢,只能过掉官方数据,洛谷上好像有加强版,只能得$86$分,就没有管了. 大概说一下思路: 暴力搜索 ...
- 用vs2008打开sln项目总是说没有对应的,打不开vs2008的工程文件提示不支持项目类型(.csproj)
找了很多解决办法都搞不定,最后找了个老司机问了一下,原来是组件没有安装完整!!!只是安装了个vs2008的外壳...下次先检查开发工具是否完整!下载安装包安装vs再说吧!
- Linux 防火墙开放特定端口 (iptables)
1.查看状态:iptables -L -n2.直接编辑:vi /etc/sysconfig/iptables3.端口开放:-A INPUT -m state --state NEW -m tcp -p ...
- unzip 命令
NAME unzip - list, test and extract compressed files in a ZIP archive SYNOPSIS unzip [-Z] [-cflptTuv ...
- 使用feign上传图片
1.添加依赖,支持SpringEncoder <dependency> <groupId>io.github.openfeign.form</groupId> &l ...