树状数组+找规律
Codeforces JAVA8 比 JAVA6 慢了快一倍.......
/**
* Created by ckboss on 14-9-8.
*/
import java.util.*;
public class SerejaandSubsequences {
static final long mod = 1000000007;
static int n;
static long[] a = new long[100100];
static long[] tree = new long[1000100];
static long[] dp = new long[100100];
static int lowbit(int x){
return x&(-x);
}
static void ADD(int pos,long value){
for(int i=pos;i<=1000010;i+=lowbit(i)){
tree[i]+=value;
if(tree[i]>=mod) tree[i]-=mod;
}
}
static long SUM(int pos){
long ret=0;
for(int i=pos;i>0;i-=lowbit(i)){
ret+=tree[i];
if(ret>=mod) ret-=mod;
}
return ret;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
n=in.nextInt();
for(int i=1;i<=n;i++){
a[i]=in.nextInt();
long sum=SUM((int)a[i]);
long jian=SUM((int)a[i])-SUM((int)(a[i]-1));
long temp=((sum*a[i])%mod+a[i]-jian+mod)%mod;
dp[i]=(dp[i]+temp)%mod;
ADD((int)a[i],temp);
}
long ans=0;
for(int i=1;i<=n;i++){
ans=(ans+dp[i])%mod;
}
System.out.println(ans);
}
}