[USACO10NOV]奶牛的图片Cow Photographs
题目描述
Farmer John希望给他的N(1<=N<=100,000)只奶牛拍照片,这样他就可以向他的朋友炫耀他的奶牛.
这N只奶牛被标号为1..N. 在照相的那一天,奶牛们排成了一排.其中第i个位置上是标号为 ci(1<=ci<=N)c_i(1<=c_i<=N)ci(1<=ci<=N) 的奶牛.
对于奶牛的站位,Farmer John有他自己的想法. FJ是这么想的,标号为i(1<=i<=n-1)的奶牛只能站在标号为i+1的奶牛的左边,而标号为N的奶牛只能站在标号为1的奶牛的左边.当然,没有牛可以站在队列中最左边的奶牛的左边了.也就是说,最左边的奶牛编号是随意的.
这些奶牛都非常的饿,急切的希望吃到FJ承诺的在拍照后的大餐,所以FJ想尽快的拍照.奶牛们的方向感非常的不好,所以FJ每一分钟只可以选择相邻的两只奶牛然后让他们交换位置.FJ最小需要多少时间就能使奶牛站成一个可以接受的序列?
比方说一个有5只奶牛的例子,一开始序列是这样的: 左边 右边 3 5 4 2 1
第一分钟,FJ可以交换第二队奶牛(即5和4),交换后的队列: 3 4 5 2 1
第二分钟,FJ交换最右边的一对,序列变成这样: 3 4 5 1 2
这样,只用了2分钟,就是序列变为了一个FJ所希望的序列.
输入输出格式
输入格式:
第1行:一个单独的数N 第2到n+1行:第i+1行上的数表示站在第i的位置上的奶牛的编号(即 cic_ici ).
输出格式:
一个整数,表示是奶牛的序列变为一个合法的序列的最小花费时间.
输入输出样例
5
3
5
4
2
1
2 提交地址:Luogu4545 众多USACO搜索题中的一股小清流;
刚看题:裸的逆序对淼淼淼淼;
笑容逐渐凝固:woc这没我想的那么简单...
我们的逆序对可以解决从1~n的排列问题, 但是这道题显然不是从1~n的排列;
那怎么办呢?
例如234561的序列, 逆序对个数为5, 这表明我们要换5次,是吗?显然不是, 我们一次都不用换;
那我们该怎样考虑这个问题呢?
我们可以把1想象成7!这样逆序对为0,且满足题意;
再举个例子, 3456721;
原始逆序对为11个;我们把1想象成8, 逆序对为5;
我们把2想象成9,逆序对为1;
这样我们保证了之前相对小的数, 在改变了它之后仍然相对小;
例如3456721, 改为3456728, 改为3456798, 还保证了"2">"1", 保证了相对大小不变, 我们改变的只是中间的"断点"; 意思是,我们从小到大枚举一个数假设它最大, 意思是它就是序列的一个结尾;
那我们怎样快速地求出修改之后的逆序对的数量呢?
显然最小的数产生的逆序对数量等于pos[i]-1, 就是它位置减一;
它成为最大值之后会增加n-pos[i]个新的逆序对;
所以我们可以先求出原先序列的逆序对, 然后枚举最小的数为最大数, 修改逆序对的数量, 然后取min;
代码奉上:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std; inline int read()
{
int res=;bool fl=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')fl=;ch=getchar();
}while(isdigit(ch)){res=(res<<)+(res<<)+(ch-'');ch=getchar();
}return fl?-res:res;
} int n;
int a[];
int pos[]; int t[];
inline int lowbit(int x){return x & -x;} inline void add(int x, int y){while(x <= n){t[x]+=y;x+=lowbit(x);}} inline int query(int x){int ans=;while(x!=)ans+=t[x], x-=lowbit(x);return ans;} long long ans;
long long best; int main()
{
n = read();
for (register int i = ; i <= n ; i ++) a[i] = read(), pos[a[i]] = i; for (register int i = n ; i >= ; i --)
{
ans += query(a[i] - );
add(a[i], );
} best = ans; for (register int i = ; i <= n ; i ++)
{
best = best - (pos[i] - ) + (n - pos[i]);
ans = min(ans, best);
}
cout << ans << endl;
return ;
}
[USACO10NOV]奶牛的图片Cow Photographs的更多相关文章
- [USACO10NOV]奶牛的图片Cow Photographs 树状数组 递推
Code: #include<cstdio> #include<algorithm> #include<string> #include<cstring> ...
- 【luoguP2995】[USACO10NOV]牛的照片Cow Photographs
题目链接 首先求出原序列的逆序对个数, 然后考虑每次将目标序列最前面的数放在最后,即最小的数变为最大 设最小数的位置是\(p\),那么逆序对的个数增加了\(n-p\),减少了\(p-1\) #incl ...
- Bzoj 2058: [Usaco2010 Nov]Cow Photographs 题解
2058: [Usaco2010 Nov]Cow Photographs Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 190 Solved: 104[ ...
- USACO 奶牛抗议 Generic Cow Protests
USACO 奶牛抗议 Generic Cow Protests Description 约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动.第i头奶牛的理智度 为Ai,Ai可能是负数.约翰希望 ...
- P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat…
题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of cours ...
- 洛谷 P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat…(树规)
题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of cours ...
- [USACO10MAR]伟大的奶牛聚集Great Cow Gat…
题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of cours ...
- 【题解】Luogu p2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat 树型dp
题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of cours ...
- P2857 [USACO06FEB]稳定奶牛分配Steady Cow Assignment
题目描述 Farmer John's N (1 <= N <= 1000) cows each reside in one of B (1 <= B <= 20) barns ...
随机推荐
- PLC与上位机的socket通讯——ABB机器人程序(三)
源程序:https://github.com/935094505/ABB-socket-communication 程序范例 觉得有帮助,别忘了打赏下
- 第八届蓝桥杯java b组第九题
标题: 分巧克力 儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形. 为了公平起见,小明需要从这 N ...
- python实现感知机线性分类模型
前言 感知器是分类的线性分类模型,其中输入为实例的特征向量,输出为实例的类别,取+1或-1的值作为正类或负类.感知器对应于输入空间中对输入特征进行分类的超平面,属于判别模型. 通过梯度下降使误分类的损 ...
- Save&Load--Unity存档读档的学习总结
存档与读档功能 举例: 传统RPG游戏(仙剑.空之轨迹): 1.角色信息(生命值,等级) 2.道具信息(装备,药品) 3.场景信息(场景名称.角色坐标) 4.事件信息(任务相关) 关卡类游戏:关卡的通 ...
- poi下载excel模板
/** * 下载模板 * @param tplName * @param returnName * @param response * @param request * @throws Excepti ...
- Jquery Ztree异步加载树
1. 下载jquery的JS文件/ztree的CSS文件和JS文件 https://jquery.com/download/ https://gitee.com/zTree/zTree_v3/tree ...
- 节点操作--JavaScript
1 - 概念 网页中的所有内容都是节点(标签.属性.文本.注释),在DOM中,节点使用node来表示. HTML DOM树中的所有节点均可通过JS进行访问,所有HTML元素(节点)均可被修改,也可以创 ...
- 快学Scala 第九课 (伴生对象和枚举)
Scala没有静态方法和静态字段, 你可以用object这个语法结构来达到同样的目的. 对象的构造器只有在第一次被使用时才调用. 伴生对象apply方法: 类和它的伴生对象可以互相访问私有特性,他们必 ...
- Android NDK(二) CMake构建工具进行NDK开发
本文目录 一Androidstudio中需要的插件 二项目配置 ①build.gardle配置 ②CMakeLists.txt ③Android和Cpp的代码 ④so文件生成 ⑤so文件的位置 一.A ...
- 在vue中操作dom元素
在vue中可以通过给标签加ref属性,就可以在js中利用ref去引用它,从而达到操作该dom元素,以下是个参考例子 1 <template> 2 <div> 3 <div ...