cf351B Jeff and Furik (树状数组)
2024-10-10 20:38:12
逆序对数=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)$
#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define pa pair<ll,ll>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=; inline char gc(){
return getchar();
static const int maxs=<<;static char buf[maxs],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,maxs,stdin),p1==p2)?EOF:*p1++;
}
inline ll rd(){
ll x=;char c=gc();bool neg=;
while(c<''||c>''){if(c=='-') neg=;c=gc();}
while(c>=''&&c<='') x=(x<<)+(x<<)+c-'',c=gc();
return neg?(~x+):x;
} int N,a[maxn];
int tr[maxn]; inline int lowbit(int x){return x&(-x);}
inline void add(int x,int y){
for(;x<=N;x+=lowbit(x)) tr[x]+=y;
}
inline int query(int x){
int re=;for(;x;x-=lowbit(x)) re+=tr[x];return re;
} int main(){
//freopen("","r",stdin);
int i,j,k;
N=rd();
for(i=;i<=N;i++) a[i]=rd();
int num=;
for(i=;i<=N;i++){
num+=i--query(a[i]);
add(a[i],);
}
printf("%d\n",*(num/)+(num&));
return ;
}
最新文章
- 跳过IE10安装VS2013
- 可分组的选择框控件(MVVM下)(Toggle样式 仿造单选框RadioButton,复选框CheckBox功能)
- 第六百零七八天 how can I 坚持
- H5常用代码:适配方案2
- vim备忘
- Solr字段配置错误
- getattr的作用是什么呢
- ceph
- jmeter测试手机app
- 杭电ACM2011--	多项式求和
- UIButton 使用imageEdgeInsets和titleEdgeInsets属性
- Sublime Text 3安装与使用 Package Control 插件安装
- android studio 报错,google后无果
- linux OSI七层模型、TCP/IP协议栈及每层结构大揭秘
- 2.5 elif
- 集合和format
- Filter—过滤器
- Java将List<;T>;集合组装成树(Tree)树结构组装
- vue的面包屑导航组件
- Week3 Teamework from Z.XML-团队分工及贡献分分配办法
热门文章
- PHP之CLI模式
- [转帖]Windows 10新预览版上线:可直接运行任意安卓APP了
- LLVM的安装
- Spring Boot(1)——开发你的第一款Spring Boot应用(Edition1)
- python之路--关于线程的一些方法
- spring程序打包war,直接通过-jar启动,并指定spring.profiles.active参数控制多环境配置
- vue element-ui 绑定@keyup事件无效
- JQ获取URL中是否含有某个字符的话,对页面进行某种操作
- 四、docker compose
- Clover file list