#include <bits/stdc++.h>
#define ii pair<int, int>
#define fi first
#define se second
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
using ll = long long;
const ll mod=1e9+7;
const int nx=1e5+5;
ll add(ll a, ll b)
{
a+=b;
if(a>=mod) a-=mod;
return a;
}
ll mul(ll a, ll b)
{
a*=b;
if(a>=mod) a%=mod;
return a;
}
ll del(ll a, ll b)
{
a-=b;
if(a<0) a+=mod;
return a;
}
ll pw(ll a, ll n)
{
if(!n) return 1;
ll tmp=pw(a, n>>1);
tmp=mul(tmp, tmp);
if(n&1) tmp=mul(tmp, a);
return tmp;
}
ll base;
ll get(ll l, ll r)
{
return mul(mul(add(l, r), (r-l+1+mod)%mod), base);
}
int n, r[nx];
pair<ll, ll> seg[nx];
ll h[nx], w[nx], ans=0, cur=0;
vector<int> rar, st[nx];
map<ll, ll> mp;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
base=pw(2, mod-2);
cin>>n;
for(int i = 1; i <= n; i++)
cin>>h[i], rar.emplace_back(h[i]);
for(int i = 1; i <= n; i++)
{
cin>>w[i];
seg[i]={cur+1, cur+w[i]};
cur+=w[i];
}
cur=0;
sort(rar.begin(), rar.end());
rar.erase(unique(rar.begin(), rar.end()), rar.end());
for(int i = 1; i <= n; i++)
h[i]=upper_bound(rar.begin(), rar.end(), h[i])-rar.begin(), st[h[i]].emplace_back(i);
for(int i = rar.size(); i >= 1; i--)
{
for(int id:st[i])
{
ll le=seg[id].fi, ri=seg[id].se;
if(mp.find(le-1)!=mp.end())
{
cur=del(cur, get(1, (le-mp[le-1])%mod));
le=mp[le-1];
}
if(mp.find(ri+1)!=mp.end())
{
cur=del(cur, get(1, (mp[ri+1]-ri)%mod));
ri=mp[ri+1];
}
mp[le]=ri;
mp[ri]=le;
cur=add(cur, get(1, (ri-le+1)%mod));
}
ll hei=(i==1)?rar[0]:(rar[i-1]-rar[i-2]);
ans=add(ans, mul(cur, get(del(rar[i-1], hei-1), rar[i-1])));
}
cout<<ans;
}
# | 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... |