Codeforces 659G Fence Divercity (组合计数)

来源:互联网 发布:低空飞行淘宝 编辑:程序博客网 时间:2024/06/06 06:20
#include <iostream>  #include <cstdio>  #include <cstring>  #include <cmath>  #include <algorithm>  #include <queue>  #include <set>  #include <ctime>  #include <cstdlib>  using namespace std;  #define inf 0x3f3f3f3f#define N 1000020#define M 1000020#define LL long long#define ULL unsigned long long #define mod 1000000007#define ls (i << 1)#define rs (ls | 1)#define md (ll + rr >> 1)#define lson ll, md, ls#define rson md + 1, rr, rs#define B 350int n, a[N];int F[N], G[N], H[N];int main() {scanf("%d", &n);for(int i = 1; i <= n; ++i) {scanf("%d", &a[i]);--a[i];}for(int i = 1; i < n; ++i) {F[i] = min(a[i], a[i+1]);}for(int i = 2; i <= n; ++i) H[i] = min(a[i], a[i-1]);for(int i = 2; i < n; ++i) G[i] = min(a[i], min(a[i-1], a[i+1]));LL ans = 0, sum = 0;for(int i = 1; i <= n; ++i) {sum = (1LL * sum * G[i-1] + F[i-1]) % mod;ans += 1LL * sum * H[i] % mod;if(ans >= mod) ans -= mod;ans += a[i];if(ans >= mod) ans -= mod;}cout << ans << endl;return 0;}

0 0