题意:有一个长度为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 (树状数组+贪心)的更多相关文章

  1. Codeforces Gym 100114 H. Milestones 离线树状数组

    H. Milestones Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descripti ...

  2. Gym 101908C - Pizza Cutter - [树状数组]

    题目链接:https://codeforces.com/gym/101908/problem/C 题意: 一块正方形披萨,有 $H$ 刀是横切的,$V$ 刀是竖切的,不存在大于等于三条直线交于一点.求 ...

  3. Codeforces Gym 100269F Flight Boarding Optimization 树状数组维护dp

    Flight Boarding Optimization 题目连接: http://codeforces.com/gym/100269/attachments Description Peter is ...

  4. gym 102082G BZOJ4240 贪心+树状数组

    4240: 有趣的家庭菜园 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 756  Solved: 349[Submit][Status][Discu ...

  5. Gym 100463A Crossings (树状数组 逆序对)

    Crossings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463 Description ...

  6. Gym 100960G (set+树状数组)

    Problem Youngling Tournament 题目大意 给一个序列a[i],每次操作可以更改一个数,每次询问 将序列排序后有多少个数a[i]>=sum[i-1]. n<=10^ ...

  7. Gym - 101350F Monkeying Around(线段树+树状数组)

    When the monkey professor leaves his class for a short time, all the monkeys go bananas. N monkeys a ...

  8. Gym - 101755G Underpalindromity (树状数组)

    Let us call underpalindromity of array b of length k the minimal number of times one need to increme ...

  9. Gym - 100269F Flight Boarding Optimization(dp+树状数组)

    原题链接 题意: 现在有n个人,s个位置和你可以划分长k个区域你可以把s个位置划分成k个区域,这样每个人坐下你的代价是该区域内,在你之前比你小的人的数量问你怎么划分这s个位置(当然,每个区域必须是连续 ...

随机推荐

  1. JQuery II

    jQuery事件的绑定 <body> <button>点击1</button> <button>点击2</button> </body ...

  2. pytorch神经网络层搭建方法

    神经网络层的搭建主要是两种方法,一种是使用类(继承torch.nn.Moudle),一种是使用torch.nn.Sequential来快速搭建. 1)首先我们先加载数据: import torchim ...

  3. github 上传大文件100MB姿势

    最新想把写一个一键配置Linux的脚本,所以就要安装一些软件咯,但是把有时候有源码安装比较好,而且有些东西直接传到Github会很方便,可又超过了100MB,Github正常情况下是不允许上传超过10 ...

  4. NOIp2015D1T3 斗地主【暴搜】

    题目传送门 刚开始读到题目的时候,非常懵逼,非常崩溃,写着写着呢,也有点崩溃,细节有点多. 这个做法呢,只能过掉官方数据,洛谷上好像有加强版,只能得$86$分,就没有管了. 大概说一下思路: 暴力搜索 ...

  5. springboot 极简使用例子: redis,MySql数据库,日志,netty,打包和运行

    配置 创建项目的时候选择 application.yml内容如下 spring: redis: host: 127.0.0.1 port: 6379 database: 0 datasource: d ...

  6. ASP.NET Core WebApi使用Swagger

    先在项目中引用Nuget包 Install-Package Swashbuckle.AspNetCore 安装之后需要在Startup.cs文件加入如下代码 public void Configure ...

  7. python 学习jieba库遇到的问题及解决方法

    昨天在课堂上学习了jieba库,跟着老师写了同样的代码时却遇到了问题: jieba分词报错AttributeError: module 'jieba' has no attribute 'cut' 文 ...

  8. Oracle-DDL 2- 视图&索引

    DDL-数据定义语句: 二.视图 --视图(view),本身不保存数据,保存的是一个查询语句--对视图的操作等同于对查询语句中源数据的操作--视图占用存储空间较小,可以快速的对特定数据进行访问和操作- ...

  9. Tomcat解析XML和反射创建对象原理

    Tomcat解析XML和反射创建对象原理 import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Me ...

  10. Test:河北金力集团企业网集成

    三.网站建设部分(40分) 河北金力集团公文流转系统 1.项目需求: 河北金力集团是我省机械加工的龙头企业,主要从事矿山机械制造及各种机械零部件加工.企业有3个厂区,主厂区位于省高新技术开发区,3个分 ...