求调70分代码
查看原帖
求调70分代码
366942
封禁用户楼主2024/8/8 15:02
#include<cstdio>
#include<algorithm>
using namespace std;
const long long MOD=1e9+7;
int n;
int a[100000+5],b[100000+5];
long long f[100000+5];
long long t[100000+5];
long long last[100000+5];
int lowbit(int x){
	return x&(-x);
}
void add(int x,long long y){
	while(x<=n){
		t[x]+=y;
		t[x]%=MOD;
		x+=lowbit(x);
	}
}
long long query(int x){
	long long ans=0;
	while(x>0){
		ans+=t[x];
		ans%=MOD;
		x-=lowbit(x);
	}
	return ans;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		b[i]=a[i];
	}
	sort(b+1,b+1+n);
	for(int i=1;i<=n;i++){
		a[i]=lower_bound(b+1,b+1+n,a[i])-b;
	}
	for(int i=1;i<=n;i++){
		f[i]=query(a[i]-1);
		f[i]-=last[a[i]];
		f[i]%=MOD;
		last[a[i]]=f[i];
		add(a[i],f[i]+1);
		//printf("%d\n",f[i]); 
	}
	long long ans=0;
	for(int i=1;i<=n;i++){
		ans+=f[i];
		ans%=MOD;
	}
	printf("%lld",ans);
}
2024/8/8 15:02
加载中...