Sleepy Cow Sorting(树状数组)
Sleepy Cow Sorting
题目传送门
Sleepy Cow Sorting
题目大意
给你一个长度为n的数组,每次只能移动最前面的那个数字到任意位置
求将数组按非递减排序需要的移动的最小次数和每次移动的距离
思路
可以将给定的数组分为两部分,分别为后半段顺序正确的部分,和前半段顺序不对的部分
所以需要改变的即为前半段的部分,即为最优解
每次移动的距离为在前半段乱序走过的路径和后半经过的路径,前半段可以自己求,后半段可以使用树状数组维护
即将后半段正序部分建立起点权为1的树
AC Code
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
#define endl '\n'
#define INF 0x3f3f3f3f
#define int long long
// #define TDS_ACM_LOCAL
const int N=1e5 +9;
int n;
int ans[N];
int a[N],bit[N]; //对应原数组和树状数组int lowbit(int x){return x&(-x);
}void updata(int i,int k){ //在i位置加上kwhile(i <= n){bit[i] += k;i += lowbit(i);}
}int getsum(int i){ //求A[1 - i]的和int res = 0;while(i > 0){res += bit[i];i -= lowbit(i);}return res;
}void solve(){cin>>n;for(int i=1; i<=n; i++) cin>>a[i];int idx=n;for(int i=n; i>=2; i--){if(a[i]<a[i-1]) break;updata(a[i],1);idx--;}updata(a[idx],1), idx--;for(int i=1; i<=idx; i++){updata(a[i],1);ans[i]=idx-i+getsum(a[i]-1);}cout<<idx<<endl;for(int i=1; i<=idx; i++) cout<<ans[i]<<" ";cout<<endl;return ;
}signed main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);
#ifdef TDS_ACM_LOCALfreopen("D:\\VS code\\.vscode\\testall\\in.txt", "r", stdin);freopen("D:\\VS code\\.vscode\\testall\\out.txt", "w", stdout);
#endifsolve();return 0;
}
Sleepy Cow Sorting(树状数组)相关推荐
- LG5200 「USACO2019JAN」Sleepy Cow Sorting 树状数组
\(\mathrm{Sleepy Cow Sorting}\) 问题描述 LG5200 题解 树状数组. 设\(c[i]\)代表\([1,i]\)中归位数. 显然最终的目的是将整个序列排序为一个上升序 ...
- HDU 2838 Cow Sorting(双树状数组+求逆序数)
Problem Description Sherlock's N (1 ≤ N ≤ 100,000) cows are lined up to be milked in the evening. Ea ...
- Why Did the Cow Cross the Road III(树状数组)
Why Did the Cow Cross the Road III 时间限制: 1 Sec 内存限制: 128 MB 提交: 65 解决: 28 [提交][状态][讨论版] 题目描述 The l ...
- [bzoj4994][Usaco2017 Feb]Why Did the Cow Cross the Road III_树状数组
Why Did the Cow Cross the Road III bzoj-4994 Usaco-2017 Feb 题目大意:给定长度为$2N$的序列,$1~N$各处现过$2$次,$i$第一次出现 ...
- 【luogu P4183】Cow at Large P(点分治)(图论)(树状数组)
Cow at Large P 题目链接:luogu P4183 题目大意 给你一棵树,然后叶子节点可以放守卫. 然后有个人在树上,然后每个时刻那个人和守卫都可以移动,如果人和守卫相遇人就被抓了,如果人 ...
- [BZOJ4994] [Usaco2017 Feb]Why Did the Cow Cross the Road III(树状数组)
传送门 1.每个数的左右位置预处理出来,按照左端点排序,因为左端点是从小到大的,我们只需要知道每条线段包含了多少个前面线段的右端点即可,可以用树状数组 2.如果 ai < bj < bi, ...
- 【bzoj4994】[Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组
题目描述 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数 样例输入 4 3 2 4 4 1 3 2 1 样例输 ...
- P5200 [USACO19JAN]Sleepy Cow Sorting
P5200 [USACO19JAN]Sleepy Cow Sorting 题目描述 Farmer John正在尝试将他的N头奶牛(1≤N≤10^5),方便起见编号为1-N,在她们前往牧草地吃早餐之前排 ...
- POJ 2481 Cows POJ 2352 Stars(树状数组妙用)
题目链接:POJ 2481 Cows POJ 2352 Stars 发现这两个题目都跟求逆序数有着异曲同工之妙,通过向树状数组中插入点的位置,赋值为1,或者++,然后通过求和来判断比当前 点 &quo ...
- POJ 2182 Lost Cows [树状数组+二分]
Description N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular di ...
最新文章
- SVN 钩子操作-同步更新web目录
- 一年过去了,25万月薪的AI工程师还存在吗?
- QT 信号与槽 最简单例子
- NRF52832编译micro-ecc是指编译器路径
- 软件项目管理的75条建议
- lvm 扩展根目录_Linux下lvm在线扩容步骤
- 借助 SAP 电商云 Spartacus UI 提供的 Schematics 辅助您的前端项目升级
- java指针的数组_java 指针 数组的使用
- python frame用法_python—dataframe用法
- 底部按钮吸附_知乎的药丸按钮(二)我的 iOS 实现
- 网页登陆注册(jsp实现)验证码
- wx.getStorage异步和wx.getStorageSync同步区别
- 符号函数的作用及Matlab中的基本用法
- QT mindmap
- asa 防火墙拦截了https_Cisco ASA防火墙的URL过滤控制
- 工作十年的程序员,却拿着毕业三年的工资……
- UVALive 3959 Rectangular Polygons (排序贪心)
- FPGA原理和结构简介
- try中的return和finally中的return
- 修复黑苹果无法播放Apple Music无损音乐的问题