雅礼集训2019 day7

这篇博客详细介绍了雅礼集训中涉及的三道题目,包括Inverse问题的概率动态规划解法,Subsequence问题的平衡树优化的动态规划策略,以及Convex问题中利用几何特性优化计算的方法。每道题目都提供了清晰的思路分析和相应的高效代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Inverse

在这里插入图片描述
1≤n≤500,0≤k≤501 ≤ n ≤ 500,0 ≤ k ≤ 501n500,0k50, P是一个1到n的排列.
概率dpdpdp好题。
思路:
定义fi,j,kf_{i,j,k}fi,j,k表示kkk轮变换之后api>apja_{p_i}>a_{p_j}api>apj的概率。
然后考虑对当前轮翻转的区间[l,r][l,r][l,r]分类转移。

  1. r&lt;i  or  l&gt;j  or  i&lt;l&lt;r&lt;jr&lt;i\ \ or\ \ l&gt;j\ \ or\ \ i&lt;l&lt;r&lt;jr<i  or  l>j  or  i<l<r<j,则fi,j,k−1→fi,j,kf_{i,j,k-1}\rightarrow f_{i,j,k}fi,j,k1fi,j,k
  2. l≤i≤r&lt;jl\le i\le r&lt;jlir<j,则fl+r−i,j,k−1→fi,j,kf_{l+r-i,j,k-1}\rightarrow f_{i,j,k}fl+ri,j,k1fi,j,k
  3. i&lt;l≤j≤ri&lt;l\le j\le ri<ljr,则fi,l+r−j,k−1→fi,j,kf_{i,l+r-j,k-1}\rightarrow f_{i,j,k}fi,l+rj,k1fi,j,k
  4. l≤i&lt;j≤rl\le i&lt;j\le rli<jr,则1−fl+r−j,l+r−i→fi,j,k1-f_{l+r-j,l+r-i}\rightarrow f_{i,j,k}1fl+rj,l+rifi,j,k

利用二阶前缀和来优化转移可以做到O(n2k)O(n^2k)O(n2k)
代码:

#include<bits/stdc++.h>
#define ri register int
using namespace std;
const int rlen=1<<18|1;
inline char gc(){
   
   
	static char buf[rlen],*ib,*ob;
	(ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin));
	return ib==ob?-1:*ib++;
}
inline int read(){
   
   
	int ans=0;
	char ch=gc();
	while(!isdigit(ch))ch=gc();
	while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc();
	return ans;
}
typedef long long ll;
const int mod=1e9+7;
inline int add(const int&a,const int&b){
   
   return a+b>=mod?a+b-mod:a+b;}
inline int dec(const int&a,const int&b){
   
   return a>=b?a-b:a-b+mod;}
inline int mul(const int&a,const int&b){
   
   return (ll)a*b%mod;}
inline void update(int&a,const int&b){
   
   a=a+b>=mod?a+b-mod:a+b;}
inline int ksm(int a,int p){
   
   int ret=1;for(;p;p>>=1,a=mul(a,a))if(p&1)ret=mul(ret,a);return ret;}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值