This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5 + 10;
int r[N][3];
int w[N];
int h[N];
int pre[N];
int ans = 0;
int mod = 1e9 + 7;
int power(int a,int b){
if (b==0)
return 1;
int ans = power(a,b/2);
ans = ans*ans;
ans %= mod;
if (b%2)
ans = ans*a;
return ans%mod;
}
int mod_inv(int k){
return power(k,mod-2);
}
int asd(int a){
int ans = (a*(a+1));
ans = ans%mod;
ans = ans*mod_inv(2);
ans = ans% mod;
return ans;
}
int answer(int W,int H){
int ans = asd(W);
int ans2 = asd(H);
return (ans*ans2)%mod ;
}
int MIN(int l,int r){
int ind = l;
for (int i=l;i<=r;i++)
if (h[i]<h[ind])
ind = i;
return ind;
}
void solve(int l,int r,int height){
if (r<l or l>r)
return;
int ind = MIN(l,r);
int width = pre[r]-pre[l-1];
if (width<0)
width += mod;
ans -= answer(width,height);
if (ans<0)
ans += mod;
ans += answer(width,h[ind]);
ans %= mod;
solve(l,ind-1,h[ind]);
solve(ind+1,r,h[ind]);
}
signed main(){
int n;
cin>>n;
for (int i=1;i<=n;i++)
cin>>h[i];
for (int i=1;i<=n;i++){
cin>>w[i];
pre[i] = pre[i-1] + w[i];
pre[i] %= mod;
}
solve(1LL,n,0LL);
cout<<ans<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |