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(树状数组)相关推荐

  1. LG5200 「USACO2019JAN」Sleepy Cow Sorting 树状数组

    \(\mathrm{Sleepy Cow Sorting}\) 问题描述 LG5200 题解 树状数组. 设\(c[i]\)代表\([1,i]\)中归位数. 显然最终的目的是将整个序列排序为一个上升序 ...

  2. HDU 2838 Cow Sorting(双树状数组+求逆序数)

    Problem Description Sherlock's N (1 ≤ N ≤ 100,000) cows are lined up to be milked in the evening. Ea ...

  3. Why Did the Cow Cross the Road III(树状数组)

    Why Did the Cow Cross the Road III 时间限制: 1 Sec  内存限制: 128 MB 提交: 65  解决: 28 [提交][状态][讨论版] 题目描述 The l ...

  4. [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$第一次出现 ...

  5. 【luogu P4183】Cow at Large P(点分治)(图论)(树状数组)

    Cow at Large P 题目链接:luogu P4183 题目大意 给你一棵树,然后叶子节点可以放守卫. 然后有个人在树上,然后每个时刻那个人和守卫都可以移动,如果人和守卫相遇人就被抓了,如果人 ...

  6. [BZOJ4994] [Usaco2017 Feb]Why Did the Cow Cross the Road III(树状数组)

    传送门 1.每个数的左右位置预处理出来,按照左端点排序,因为左端点是从小到大的,我们只需要知道每条线段包含了多少个前面线段的右端点即可,可以用树状数组 2.如果 ai < bj < bi, ...

  7. 【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 样例输 ...

  8. P5200 [USACO19JAN]Sleepy Cow Sorting

    P5200 [USACO19JAN]Sleepy Cow Sorting 题目描述 Farmer John正在尝试将他的N头奶牛(1≤N≤10^5),方便起见编号为1-N,在她们前往牧草地吃早餐之前排 ...

  9. POJ 2481 Cows POJ 2352 Stars(树状数组妙用)

    题目链接:POJ 2481 Cows POJ 2352 Stars 发现这两个题目都跟求逆序数有着异曲同工之妙,通过向树状数组中插入点的位置,赋值为1,或者++,然后通过求和来判断比当前 点 &quo ...

  10. POJ 2182 Lost Cows [树状数组+二分]

    Description N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular di ...

最新文章

  1. SVN 钩子操作-同步更新web目录
  2. 一年过去了,25万月薪的AI工程师还存在吗?
  3. QT 信号与槽 最简单例子
  4. NRF52832编译micro-ecc是指编译器路径
  5. 软件项目管理的75条建议
  6. lvm 扩展根目录_Linux下lvm在线扩容步骤
  7. 借助 SAP 电商云 Spartacus UI 提供的 Schematics 辅助您的前端项目升级
  8. java指针的数组_java 指针 数组的使用
  9. python frame用法_python—dataframe用法
  10. 底部按钮吸附_知乎的药丸按钮(二)我的 iOS 实现
  11. 网页登陆注册(jsp实现)验证码
  12. wx.getStorage异步和wx.getStorageSync同步区别
  13. 符号函数的作用及Matlab中的基本用法
  14. QT mindmap
  15. asa 防火墙拦截了https_Cisco ASA防火墙的URL过滤控制
  16. 工作十年的程序员,却拿着毕业三年的工资……
  17. UVALive 3959 Rectangular Polygons (排序贪心)
  18. FPGA原理和结构简介
  19. try中的return和finally中的return
  20. 修复黑苹果无法播放Apple Music无损音乐的问题

热门文章

  1. 加州房价篇 (二) : 处理数据
  2. vue源码解析:vue生命周期方法$mount方法的实现原理
  3. iOS开发笔记1:ToDoList、相册、地图应用及新浪微博
  4. Red Hat Linux9.0操作系统安装和配置入门
  5. Bmob后端云上传多张图片
  6. 浅谈 Lempel-Ziv压缩方法
  7. 决策表(决策树)[软件工程]
  8. webpack中vender的抽离
  9. nextdate函数白盒测试问题 软件测试_NextDate函数测试用例
  10. 《视觉SLAM十四讲 第二版》笔记及课后习题(第二讲)