Submission #1265832

#TimeUsernameProblemLanguageResultExecution timeMemory
1265832dio_2Fancy Fence (CEOI20_fancyfence)C++20
12 / 100
1 ms328 KiB
#include<bits/stdc++.h>

const int MOD = int(1e9) + 7;

int f(int a, int b){
	b = b % MOD;
	return int64_t(a) * (a + 1) / 2 % MOD * int64_t(b) * (b + 1) / 2 % MOD;
}

int main(){
	using namespace std;
	ios::sync_with_stdio(false), cin.tie(nullptr);
	
	int n;
	cin >> n;
	
	vector<int> h(n), w(n);
	for(int i = 0;i < n;i++) cin >> h[i];
	for(int i = 0;i < n;i++) cin >> w[i];
	
	int ans = 0;
	
	for(int i = 0;i < n;i++){
		int l = i, r = i;
		int64_t sL = 0;
		int64_t sR = 0;
		while(l - 1 >= 0 && h[l - 1] >= h[i]){
			l -= 1;
			sL += w[l];
		}
		while(r + 1 < n && h[r + 1] > h[i]){
			r += 1;
			sR += w[r];
		}
		// but it must strictly contain me
		
		ans += f(h[i], w[i]) * int64_t(sL+1) % MOD * int64_t(sR+1) % MOD;
		// this is not neccesaryli contiguous?
		
		
		
		if(ans >= MOD)
			ans -= MOD;
	}
	
	cout << ans << '\n';
	
	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...