Submission #1159940

#TimeUsernameProblemLanguageResultExecution timeMemory
1159940KluydQFancy Fence (CEOI20_fancyfence)C++20
100 / 100
49 ms37960 KiB
#include <bits/stdc++.h> #define respagold ios_base::sync_with_stdio(0), cin.tie(0); #define int long long #define ll long long #define int2 __int128_t #define FOR( i, x, n, d ) for( int i = x; i <= n; i += d ) #define FORR( i, x, n, d ) for( int i = x; i >= n; i -= d ) #define F first #define S second #define all(x) x.begin(), x.end() #define sz(x) (int)(x.size()) #define pb push_back #define ins insert #define lb lower_bound #define ub upper_bound #define pii pair <int, int> #define mkp make_pair using namespace std; const int N = 1e5 + 123; const int inf = 1e18; const int mod = 1e9 + 7; const double eps = 1e-13; int a[N], b[N], p[N], n, m, k, z, x, y, ans, lg[N], inv; pii st[N][20]; mt19937 rng( chrono::steady_clock::now().time_since_epoch().count()); int rand( int l, int r ) { uniform_int_distribution <int> uid( l, r ); return uid( rng ); } pii get( int l, int r ) { int d = lg[r - l + 1]; return min( st[l][d], st[r - (1 << d) + 1][d] ); } void dc( int l, int r ) { if( l > r ) return; pii now = get( l, r ); int sum = 0, he = now.F, wl = p[now.S - 1] - p[l - 1], wr = p[r] - p[now.S], vnutri = b[now.S] * ( b[now.S] + 1 ) / 2; wl = ( wl + mod ) % mod; wr = ( wr + mod ) % mod; vnutri %= mod; // sum += (he - i + 1) // sum += he * he - he * i + he // sum = he * he - he * (he + 1) / 2 + he sum = he * he - he * (he + 1) / 2 + he; sum %= mod; ans = ( ans + ( wl * wr + b[now.S] * (wl + wr) % mod + vnutri % mod ) % mod * sum % mod ) % mod; dc( l, now.S - 1 ); dc( now.S + 1, r ); } void solve() { cin >> n; FOR( i, 1, n, 1 ) cin >> a[i], st[i][0] = { a[i], i }; FOR( i, 1, n, 1 ) cin >> b[i], lg[i] = lg[i >> 1] + (i != 1), p[i] = (p[i - 1] + b[i]) % mod; FOR( j, 1, 17, 1 ) { FOR( i, 1, n, 1 ) { if( i + (1 << j) - 1 > n ) break; st[i][j] = min( st[i][j - 1], st[i + (1 << j - 1)][j - 1] ); } } dc( 1, n ); cout << ans; } signed main() { respagold; int test = 1; if( !test ) cin >> test; while( test -- ) solve(); }
#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...