#include<bits/stdc++.h>
using namespace std;
void speed()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
const int maxn=1e9+7;
struct cell
{
int w,ind;
long long int h;
bool operator<(const cell&c)const
{
if(h!=c.h)return h<c.h;
return ind<c.ind;
}
};
int n,a[10005],b[10005],dist[10005];
long long int otg,di,raz,um,br;
cell c[10005],p[40005],inf;
void build(int l,int r,int h)
{
if(l==r)
{
p[h]=c[l];
return;
}
build(l,(l+r)/2,h*2);
build((l+r)/2+1,r,h*2+1);
p[h]=min(p[h*2],p[h*2+1]);
}
void update(int l,int r,int q,int h)
{
if(l>q||r<q)return;
if(l==r)
{
p[h].h=1e9+1;
return;
}
update(l,(l+r)/2,q,h*2);
update((l+r)/2+1,r,q,h*2+1);
p[h]=min(p[h*2],p[h*2+1]);
}
cell query(int l,int r,int ql,int qr,int h)
{
if(l>qr||r<ql)return inf;
if(l>=ql&&r<=qr)return p[h];
return min(query(l,(l+r)/2,ql,qr,h*2),query((l+r)/2+1,r,ql,qr,h*2+1));
}
void rec(int l,int r,int last)
{
br++;
vector<cell>v;
v.push_back(query(1,n,l,r,1));
//if(v[0].h==1e9+1)return;
if(l>r)return;
update(1,n,v[0].ind,0);
while(true)
{
v.push_back(query(1,n,l,r,1));
if(v.back().h!=v[0].h)
{
v.pop_back();
break;
}
update(1,n,v.back().ind,1);
}
di=(dist[r]-dist[l-1]);
raz=v[0].h-last;
um=(((di+1)*di)/2)%maxn;
otg=otg+(last*((raz*um)%maxn)%maxn)%maxn;
otg=otg+(um*(((raz*(raz+1))/2)%maxn))%maxn;
//cout<<l<<" "<<r<<" "<<last<<" "<<otg<<endl;
int prev=l;
for(int i=0;i<v.size();i++)
{
rec(prev,v[i].ind-1,v[0].h);
prev=v[i].ind+1;
}
rec(prev,r,v[0].h);
}
void read()
{
inf.h=1e9+1;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
c[i].h=a[i];;
c[i].ind=i;
}
for(int i=1;i<=n;i++)
{
cin>>b[i];
c[i].w=b[i];
dist[i]=dist[i-1]+b[i];
dist[i]%=maxn;
}
build(1,n,1);
rec(1,n,0);
cout<<otg<<endl;
}
int main()
{
speed();
read();
}
| # | 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... |