Submission #1301833

#TimeUsernameProblemLanguageResultExecution timeMemory
1301833guilhermecppFancy Fence (CEOI20_fancyfence)C++20
12 / 100
1 ms580 KiB
#include <bits/stdc++.h> using namespace std; mt19937 mt(chrono::steady_clock::now().time_since_epoch().count()); // teste #define int long long #define fi first #define se second #define pb push_back // #define endl '\n' typedef long long ll; typedef pair<int,int> pii; const int N = 1e5+5; const int mod = 1e9+7; const int inv2 = (mod+1)/2; const int INF = 1e9+5; int a[N], b[N]; int accu[N]; int pai[N], lef[N], rig[N]; int Calc(int x, int y) { int ans = 1; ans = (ans*x)%mod; ans = (ans*(x+1))%mod; ans = (ans*inv2)%mod; ans = (ans*y)%mod; ans = (ans*(y+1))%mod; ans = (ans*inv2)%mod; return ans; } int Solv(int u, int l, int r) { int ans = 0; if(!pai[u] || a[pai[u]]!=a[u]) { int x = accu[r]-accu[l-1]; ans = (Calc(a[u], x)+mod-Calc(a[pai[u]], x))%mod; } if(lef[u]) ans = (ans+Solv(lef[u], l, u-1))%mod; if(rig[u]) ans = (ans+Solv(rig[u], u+1, r))%mod; return ans; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; for(int i = 1;i <= n;i++) cin >> a[i]; for(int i = 1;i <= n;i++) cin >> b[i]; for(int i = 1;i <= n;i++) accu[i] = accu[i-1]+b[i]; stack<int> pilha; for(int i = 1;i <= n;i++) pai[i] = lef[i] = rig[i] = 0; for(int i = 1;i <= n;i++) { int ult = 0; while(!pilha.empty() && a[pilha.top()]>a[i]) { ult = pilha.top(); pilha.pop(); } if(ult) { pai[ult] = i; lef[i] = ult; } if(!pilha.empty()) { pai[i] = pilha.top(); rig[pilha.top()] = i; } pilha.push(i); } int root = 1; while(pai[root]) root++; cout << Solv(root, 1, n) << endl; return 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...