#include <bits/stdc++.h>
using namespace std;
long long int mod=1e9+7;
long long int najdi(long long int a)
{
return ((a*(a+1))/2LL)%mod;
}
int main()
{
long long int n,a,res=0;
cin>>n;
vector<long long int>v[2];
stack<pair<int,int>>st;
for(int i=0;i<n;i++)
{
cin>>a;
v[0].push_back(a);
}
for(int i=0;i<n;i++)
{
cin>>a;
v[1].push_back(a);
}
for(int i=0;i<n;i++)
{
res=(res+najdi(v[0][i])*najdi(v[1][i]))%mod;
long long int sum=0;
while(!st.empty()&&(st.top()).first>=v[0][i])
{
auto p=st.top();
st.pop();
res=(res+((najdi(p.first)*p.second)%mod)*sum)%mod;
sum=(sum+p.second)%mod;
}
res=(res+((najdi(v[0][i])*v[1][i])%mod)*sum)%mod;
st.push({v[0][i],(sum+v[1][i])%mod});
}
long long int sum=0;
while(!st.empty())
{
auto p=st.top();
st.pop();
res=(res+((najdi(p.first)*p.second)%mod)*sum)%mod;
sum=(sum+p.second)%mod;
}
cout<<res;
return 0;
}
# | 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... |