提交时间:2024-05-06 14:02:55
运行 ID: 29322
#include<bits/stdc++.h> using namespace std; #define int long long const int MAXN=200010,inf=1000000000,Mod=1000000007; int n,l,r,m,ans,a[MAXN],use[MAXN]; int C[MAXN]; int lb(int x){return x&(-x);} void upd(int x,int y){ for(int i=x;i<=n;i+=lb(i))C[i]+=y; } int qry(int x){ int res=0; for(int i=x;i>=1;i-=lb(i))res+=C[i]; return res; } void dfs(int now,int sum){ if(sum>r)return; if(now==n+1){ ans+=sum>=l; return; } if(a[now]){ sum+=now-1-qry(a[now]); upd(a[now],1); dfs(now+1,sum); upd(a[now],-1); return; } for(int i=1;i<=n;i++){ if(!use[i]){ use[i]=1; upd(i,1); dfs(now+1,sum+now-qry(i)); upd(i,-1); use[i]=0; } } } void slv(){ scanf("%lld%lld%lld",&n,&l,&r); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); use[a[i]]=1; } dfs(1,0); printf("%lld",ans); } signed main(){ slv(); return 0; }