[题解]CF61E Enemy is weak

news/2024/5/19 0:54:36

CF61E Enemy is weak

如下图,第\(i\)\(j\)列表示第\(j\)个数结尾,向前长度为\(i\)的逆序子序列个数。

image

递推方式见下图。

  • 第一行全为\(1\)
  • 要填第\(2\)行的值,就往前找所有\(>\)当前元素的位置,把它们第\(1\)行的值加起来。
  • 要填第\(3\)行的值,就往前找所有\(>\)当前元素的位置,把它们第\(2\)行的值加起来。
    image
    最终第\(3\)行值的和就是我们要求的结果。

怎么快速找出\(>\)当前元素的答案和呢?我们可以用线段树(树状数组)。发现数据范围太大,需要离散化。

线段树/树状数组需要维护第\(1\)行和第\(2\)行,第\(3\)行不参与运算,现求现加即可。

这里用线段树实现。

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define lc (x<<1)
#define rc (x<<1|1)
#define N 1000010
using namespace std;
int n,a[N],b[N];
int sum[2][4*N];
int ans=0;
void update(int x){sum[0][x]=sum[0][lc]+sum[0][rc];sum[1][x]=sum[1][lc]+sum[1][rc];
}
void build(int l,int r,int x){if(l==r){sum[0][x]=sum[1][x]=0;return;}int mid=(l+r)>>1;build(l,mid,lc);build(mid+1,r,rc);update(x);
}
void change(int a,int v1,int v2,int l,int r,int x){if(l==r){sum[0][x]+=v1,sum[1][x]+=v2;return;}int mid=(l+r)>>1;if(a<=mid) change(a,v1,v2,l,mid,lc);else change(a,v1,v2,mid+1,r,rc);update(x);
}
pair<int,int> query(int a,int b,int l,int r,int x){if(a<=l&&r<=b) return {sum[0][x],sum[1][x]};int mid=(l+r)>>1;pair<int,int> ans;if(a<=mid){auto t=query(a,b,l,mid,lc);ans.first+=t.first,ans.second+=t.second;}if(b>mid){auto t=query(a,b,mid+1,r,rc);ans.first+=t.first,ans.second+=t.second;}return ans;
}
signed main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];b[i]=a[i];}sort(b+1,b+1+n);int tn=unique(b+1,b+1+n)-b-1;for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+1+tn,a[i])-b;build(1,n,1);for(int i=1;i<=n;i++){auto q=query(a[i]+1,tn,1,n,1);//q.first表示第1行的和//q.second表示第2行的和change(a[i],1,q.first,1,n,1);ans+=q.second;}cout<<ans;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/24836.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Visual Studio 项目发布时将资源目录文件夹所有文件拷贝到发布路径

1.背景 在 .NET 项目开发过程中,时常需要将资源文件夹复制到生成目录,以确保这些资源随项目输出。 2.方法找到当前项目例如:xxxxx.Api 双击 进入,对 .csproj文件内容 ,加入如下信息:<Target Name="CopyResourcesPublish" AfterTargets="Publish"…

04、数据保护技术

数据保护技术 1.磁盘镜像制作 1.1.Windows 磁盘镜像制作及恢复 GetData Forenisc Imager 该工具安装后,可将安装后的文件复制出来(类似绿色运行) 使用(需要管理员运行):https://getdataforensics.com/product/fex-imager/DataNumen Disk Image 1.2.Linux 磁盘镜像制作(命…

visualstudio着色器设计器shadergraph使用

第一次使用着色器设计器。 vs的着色器设计器是hlsl的着色器设计器。不得不说里面节点得翻译是一坨屎。 附一个光线于法向量夹角渲染的设计图

linux系统管理

1.用户、用户组 创建用户 useradd [-g -d] 用户名 选项:-g指定用户的组,不指定-g,会创建同名组并自动加入,指定-g需要组已经存在,如已存在同名组,必须使用-g 选项:-d指定用户HOME路径,不指定,HOME目录默认在:/home/用户名 删除用户 userdel [-r] 用户名 选项:-r,删…

探索飞行奥秘:3D模型带你走进飞机涡轮发动机的世界

飞机涡轮发动机3D模型不仅是对真实发动机的精准复制,更是科技与艺术的完美结合。每一个细节都经过精心打磨,无论是复杂的叶片结构、精致的燃烧室,还是精密的控制系统,都让人叹为观止。仿佛置身于真实的发动机内部,感受着那股强大的力量从心底涌起。在浩瀚的蓝天下,飞机如…

openwrt wifi连接做中继

连接目标wifi 重命名下 3. 4. 在无线安全里设置wifi密码后 保存应用 大功告成