제출 #475442

#제출 시각아이디문제언어결과실행 시간메모리
475442MohamedAhmed04Calvinball championship (CEOI15_teams)C++14
100 / 100
361 ms496 KiB
#include <bits/stdc++.h>

using namespace std ;

const int mod = 1000007 ;

int Add(int x , int y)
{
	int z = x + y ;
	if(z >= mod)
		z -= mod ;
	return z ;
}

int Mul(int x , int y)
{
	return (1ll * x * y) % mod ;
}

const int MAX = 1e4 + 10 ;

int arr[MAX] ;
int n ;

int dp[2][MAX] , val[MAX] ;

int main()
{
	ios_base::sync_with_stdio(0) ;
	cin.tie(0) ;
	cin>>n ;
	for(int i = 1 ; i <= n ; ++i)
		cin>>arr[i] ;
	val[0] = 1 ; 
	for(int i = 1 ; i <= n ; ++i)
		val[i] = max(val[i-1] , arr[i]) ;
	for(int j = 1 ; j <= n ; ++j)
		dp[(n+1)&1][j] = 1 ;
	int ans = 0 ;
	for(int i = n ; i >= 1 ; --i)
	{
		int now = (i&1) ;
		int nxt = !now ;
		for(int j = 1 ; j <= n ; ++j)
			dp[now][j] = Add(Mul(j , dp[nxt][j]) , dp[nxt][j+1]) ;
		ans = Add(ans , Mul(arr[i]-1 , dp[nxt][val[i-1]])) ;
	}
	ans = Add(ans , 1) ;
	return cout<<ans<<"\n" , 0 ;
}		
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...