Cow Photographs bzoj-2058 Usaco-2010 Nov

题目大意:给定一个n的排列。每次操作可以交换相邻两个数。问将序列变成一个:$i,i+1,i+2,...,n,1,2,...,i-1$形式的序列最少操作次数。

注释:$1\le n\le 10^5$。


想法

我们做过将序列变成1~n的形式,就是用树状数组求一下逆序对个数。

而这个题我们先求出i=1的答案,没错就是逆序对个数。

然后我们考虑如何从$i$变成$i+1$。

每次,我们考虑将当前序列中最小的数变成最大的数加1,再次求这个序列的逆序对个数,就是i+1的答案。

他们之间的关系,就是最小的数后面的数的个数减去前面的数的个数。

理由

我们设f[i]为i开头的答案。

假设我们已经知道了f[i]的答案,即当前序列中的数是$i,i+1,i+2,..,n+i-1$。

这时我们将$i$变成$n+i$,$dic[i]$为i的位置。显然,dic[i]+1到n的数都比n+i小,而1到dic[i]-1的数都比i大,证毕。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 100010
using namespace std; typedef long long ll;
ll a[N],dic[N]; ll tree[N<<1]; ll n;
inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
ll rd() {ll x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=nc(); return x;}
inline ll lowbit(ll x) {return x&(-x);}
void update(ll x) {for(ll i=x;i;i-=lowbit(i)) tree[i]++;}
ll query(ll x) {ll ans=0; for(ll i=x;i<=n+1;i+=lowbit(i)) ans+=tree[i]; return ans;}
int main()
{
ll now=0,ans=0;
n=rd(); for(int i=1;i<=n;i++) a[i]=rd(); for(ll i=1;i<=n;i++)
{
dic[a[i]]=i; now+=query(a[i]+1);
update(a[i]);
}
ans=now;
for(int i=1;i<n;i++)
{
now+=n+1-2*dic[i];
ans=min(ans,now);
}
printf("%lld\n",ans);
return 0;
}

小结:好题好题!!

[bzoj2058][Usaco2010 Nov]Cow Photographs_树状数组_动态规划的更多相关文章

  1. [Cometoj#4 E]公共子序列_贪心_树状数组_动态规划

    公共子序列 题目链接:https://cometoj.com/contest/39/problem/E?problem_id=1585 数据范围:略. 题解: 首先可以考虑知道了$1$的个数和$3$的 ...

  2. BZOJ_2058_[Usaco2010 Nov]Cow Photographs_逆序对

    BZOJ_2058_[Usaco2010 Nov]Cow Photographs_逆序对 题意: 奶牛的图片 Farmer John希望给他的N(1<=N<=100,000)只奶牛拍照片, ...

  3. hdu 2838 Cow Sorting (树状数组)

    Cow Sorting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

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

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

  5. hdu 2838 Cow Sorting 树状数组求所有比x小的数的个数

    Cow Sorting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. [Usaco2014 Open Gold ]Cow Optics (树状数组+扫描线/函数式线段树)

    这道题一上手就知道怎么做了= = 直接求出原光路和从目标点出发的光路,求这些光路的交点就行了 然后用树状数组+扫描线或函数式线段树就能过了= = 大量的离散+模拟+二分什么的特别恶心,考试的时候是想到 ...

  7. HDU2838 Cow Sorting 树状数组 区间求和加逆序数的应用

    这题目意思非常easy,就是给你一个数组,然后让你又一次排好序,排序有要求的,每次仅仅能交换两个元素的位置,交换须要一个代价 就是两个元素之和,问你把数组重小到大排好最少须要多少代价 可能一開始想不到 ...

  8. bzoj 4994: [Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组_排序

    Description 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数 题解: 方法一: 搞一个KDtree, ...

  9. [bzoj3529][Sdoi2014]数表_树状数组_莫比乌斯反演

    数表 bzoj-3529 Sdoi-2014 题目大意:n*m的数表,第i行第j列的数是同时整除i和j的所有自然数之和.给定a,求数表中所有不超过a的和. 注释:$1\le n,m \le 10^5$ ...

随机推荐

  1. AJPFX总结关于Java中过滤出字母、数字和中文的正则表达式

    1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式      [^(A-Za-z)] (2) 过滤出 数字 的正则表达式   [^(0-9)] (3) 过滤出 中文 的正则 ...

  2. 5 Transforms 转移 笔记

    5 Transforms 转移 笔记   Transforms    Unfortunately, no one can be told what the Matrix is. You have to ...

  3. url传值的长度限制解决办法

    今天写到两个页面传值,刚开始通过url上加参数进行传值, var strLink = "my.asp?str1=" + str1List + "&str2=&qu ...

  4. ORM-PetaPoco

    PetaPoco有以下特色:--------------------------20170715姜彦 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的Poco类, ...

  5. 半斤八两中级破解 (四) TCP_UDP协议转向本地验证

    首先要用抓包工具判断是哪种协议,根据封包助手来看,教程中给出的例子是个TCP协议的,此时要记录下包的: 源地址,源端口     目的地址,目的端口   源包大小  目的包大小 然后再重新运行抓包工具和 ...

  6. 模拟Java-Sping,实现其IOC和AOP核心

    简易的IOC框图 注解的方式实现了左边的分支,那么就剩下右边的XML分支: XmlContext:这个类是也是AbstractApplicationContext的子类,和AnnotationCont ...

  7. c++ 模板template

    1.函数模板的声明 声明形式 template<typename 数据类型参数标识符> <返回类型><函数名>(参数表) {     函数体 } 注: templa ...

  8. vue vueRouter vuex Axios webpack 前端常用内容

    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中.

  9. PHP 中 include() 与 require() 的区别说明

    引用文件的方法有两种:require 及 include.两种方式提供不同的使用弹性. require 的使用方法如 require("MyRequireFile.php"); . ...

  10. vue 添加 fastclick的支持

    fastclick:处理移动端click事件300毫秒延迟 1.兼容性iOS 3及更高版本的移动SafariiOS 5及更高版本的ChromeAndroid上的Chrome(ICS)Opera Mob ...