zoukankan      html  css  js  c++  java
  • cf351B Jeff and Furik (树状数组)

    逆序对数=0的时候,这个数列是有序的

    然后交换相邻的,看哪个比较大,逆序对数会加1或减1

    Jeff用的是最优策略所以他肯定让逆序对数-1

    设f[i]表示Jeff操作前,逆序对数为i,最终的期望次数

    那就有$f[i]=0.5f[i-2]+0.5f[i]+2$

    以及$f[1]=1,f[0]=0$

    可以得出$f[i]=4*floor(i/2)+(i&1)$

     1 #pragma GCC optimize(3)
     2 #include<bits/stdc++.h>
     3 #define pa pair<ll,ll>
     4 #define CLR(a,x) memset(a,x,sizeof(a))
     5 using namespace std;
     6 typedef long long ll;
     7 const int maxn=3050;
     8 
     9 inline char gc(){
    10     return getchar();
    11     static const int maxs=1<<16;static char buf[maxs],*p1=buf,*p2=buf;
    12     return p1==p2&&(p2=(p1=buf)+fread(buf,1,maxs,stdin),p1==p2)?EOF:*p1++;
    13 }
    14 inline ll rd(){
    15     ll x=0;char c=gc();bool neg=0;
    16     while(c<'0'||c>'9'){if(c=='-') neg=1;c=gc();}
    17     while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+c-'0',c=gc();
    18     return neg?(~x+1):x;
    19 }
    20 
    21 int N,a[maxn];
    22 int tr[maxn];
    23 
    24 inline int lowbit(int x){return x&(-x);}
    25 inline void add(int x,int y){
    26     for(;x<=N;x+=lowbit(x)) tr[x]+=y;
    27 }
    28 inline int query(int x){
    29     int re=0;for(;x;x-=lowbit(x)) re+=tr[x];return re;
    30 }
    31 
    32 int main(){
    33     //freopen("","r",stdin);
    34     int i,j,k;
    35     N=rd();
    36     for(i=1;i<=N;i++) a[i]=rd();
    37     int num=0;
    38     for(i=1;i<=N;i++){
    39         num+=i-1-query(a[i]);
    40         add(a[i],1);
    41     }
    42     printf("%d
    ",4*(num/2)+(num&1));
    43     return 0;
    44 }
  • 相关阅读:
    THINKPHP增删改查--(改)
    thinkphp中各字母代表的发放和具体实例
    PHP时间戳和日期互转换
    jquery方法大全
    Bootstrap里的文件分别表示什么?都有什么用?
    文本一处隐藏显示
    点击下拉,其余不动的jquery事件(转)
    JQuery中$.ajax()方法参数详解
    数据库联合查询输出数量
    如何使div居中
  • 原文地址:https://www.cnblogs.com/Ressed/p/9985851.html
Copyright © 2011-2022 走看看