rt
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define low(x) (x&(-x))
const int N = 2e5+10,mod = 1e9+7;
int f[N],a[N],c[N],t[N],la[N],b[N];
int n,cnt,ans;
map<int,int> m;
void change(int x,int k){
while(x<=cnt){
t[x]+=k;
t[x]%=mod;
x+=low(x);
}
}
int sum(int x){
int res=0;
while(x>0){
res+=t[x];
res%=mod;
x-=low(x);
}
return res;
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
b[i]=a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
if(!m[a[i]]){
c[++cnt]=a[i];
m[a[i]]=cnt;
}
}
for(int i=1;i<=n;i++){
int u=m[b[i]];
int res=0;
f[i]=sum(u);
f[i]%=mod;
res+=f[i]-la[u];
ans+=res;
ans%=mod;
if(!la[u]){
res+=1;
res%=mod;
}
la[u]=f[i];
change(u+1,res);
change(cnt+1,-res);
}
ans%=mod;
printf("%lld",ans);
return 0;
}
测试点信息: 测试点
qiuqiule!