Submission #1109933

#TimeUsernameProblemLanguageResultExecution timeMemory
1109933parsadox2Fancy Fence (CEOI20_fancyfence)C++17
55 / 100
1085 ms4688 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int MOD = 1e9+7; void solve() { int n; cin >> n; pair<int,int> nums[n]; int mx = 0; bool b = 1, b2 = 1; for (int i = 0;i < n;i++) { cin >> nums[i].first; mx = max(mx, nums[i].first); } for (int i = 1;i < n;i++) { if (nums[i].first != nums[i-1].first) { b = false; } if (nums[i].first < nums[i-1].first) { b2 = false; } } for (int i = 0;i < n;i++) { cin >> nums[i].second; } int ans = 0; if (b) { int len = 0; for (int i = 0;i < n;i++) { len += nums[i].second; } len%= MOD; ans = (((mx)*(mx+1)/2)%MOD)*(((len)*(len+1)/2)%MOD); ans %= MOD; cout << ans; return; } if (b2) { int suf[n]; suf[n-1] = nums[n-1].second; for (int i = n-2;i >= 0;i--) { suf[i] = (suf[i+1] + nums[i].second)%MOD; } int last = 0; int ans = 0; for (int i = 0;i < n;i++) { int x = ( (((nums[i].first+1)* (nums[i].first)/2)%MOD) - (((last+1)* (last)/2)%MOD) + MOD )%MOD; int y = (((suf[i]+1)*(suf[i])/2)%MOD); ans = (ans + (x*y))%MOD; last = nums[i].first; } cout << ans; return; } for (int h = 1;h <= mx;h++) { int len = 0; for (int i = 0;i < n;i++) { if (nums[i].first < h) { len %= MOD; ans = (ans + (h * (((len)*(len+1)/2)%MOD)))%MOD; len = 0; } else { len += nums[i].second; } } len %= MOD; ans = (ans + ((h) * (((len)*(len+1)/2)%MOD)))%MOD; len = 0; } cout << ans; } int32_t main() { ios::sync_with_stdio(0); cin.tie(0); int tc = 1; //cin >> tc; while (tc--) { 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...