#include<bits/stdc++.h>
#define lcm(a,b) (a/__gcd(a,b))*b
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long int
#define vi vector<int>
#define vll vector<ll>
#define pb push_back
#define F first
#define S second
#define mp make_pair
//salida rapida "\n"
//DECIMALES fixed<<sp(n)<<x<<endl;
//gcd(a,b)= ax + by
//lCB x&-x
//set.erase(it) - ersases the element present at the required index//auto it = s.find(element)
//set.find(element) - iterator pointing to the given element if it is present else return pointer pointing to set.end()
//set.lower_bound(element) - iterator pointing to element greater than or equal to the given element
//set.upper_bound(element) - iterator pointing to element greater than the given element
// | ^
//__builtin_popcount(x)
using namespace std;
const ll MOD=1e9+7;
vll h,w;
ll res=0;
vi ind;
vector<bool>vis;
int P[1000005];
ll bin(ll x){
x%=MOD;
return ((x*(x+1))/2)%MOD;
}
ll T(ll x,ll y){
return (bin(x)%MOD*bin(y)%MOD)%MOD;
}
bool comp(int x,int y){
return h[x]>h[y];
}
int _find(int x){
if(P[x]==x)return x;
return P[x]=_find(P[x]);
}
void _union(int x,int y){
x=_find(x),y=_find(y);
if(x==y)return;
P[x]=y;
w[y]=(w[y]+w[x])%MOD;
}
int sum(int x){
x=_find(x);
return w[x];
}
int main()
{
//freopen("input1.txt","r",stdin);
ll n,x;
cin>>n;vis.assign(n+1,false);
for(int i=0;i<n;i++){
P[i]=i;
cin>>x;
h.pb(x);
}
for(int i=0;i<n;i++){
cin>>x;ind.pb(i);
w.pb(x);
}
ll res=0;
sort(ind.begin(),ind.end(),comp);
for(int i=0;i<n;i++){
int it=ind[i],L=0,R=0;
vis[it]=true;
//siempre me "conecto" con uno de mayor o igual altitud
if(it && vis[it-1]){
L=sum(it-1);
_union(it,it-1);
}
if(it<n-1 && vis[it+1]){
R=sum(it+1);
//cout<<"padre "<<_find(it+1)<<endl;
_union(it,it+1);
}
//cout<<L<<" " <<R<<endl;
int SUM=(L+R+w[it])%MOD;
res=(res+T(SUM,h[it])+MOD)%MOD;
res=(res-T(L,h[it])+MOD)%MOD;
res=(res-T(R,h[it])+MOD)%MOD;
}
res+=MOD;
res%=MOD;
cout<<res<<endl;
return 0;
}
//409336628
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
2 ms |
332 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
204 KB |
Output is correct |
3 |
Correct |
1 ms |
204 KB |
Output is correct |
4 |
Correct |
1 ms |
204 KB |
Output is correct |
5 |
Correct |
1 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
37 ms |
2616 KB |
Output is correct |
4 |
Correct |
69 ms |
4736 KB |
Output is correct |
5 |
Correct |
70 ms |
4740 KB |
Output is correct |
6 |
Correct |
70 ms |
4804 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
332 KB |
Output is correct |
2 |
Correct |
10 ms |
884 KB |
Output is correct |
3 |
Correct |
47 ms |
3024 KB |
Output is correct |
4 |
Correct |
93 ms |
5528 KB |
Output is correct |
5 |
Correct |
96 ms |
5624 KB |
Output is correct |
6 |
Correct |
1 ms |
204 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
2 ms |
332 KB |
Output is correct |
3 |
Correct |
10 ms |
888 KB |
Output is correct |
4 |
Correct |
47 ms |
3012 KB |
Output is correct |
5 |
Correct |
95 ms |
5540 KB |
Output is correct |
6 |
Correct |
99 ms |
5652 KB |
Output is correct |
7 |
Correct |
2 ms |
332 KB |
Output is correct |
8 |
Correct |
10 ms |
832 KB |
Output is correct |
9 |
Correct |
54 ms |
3168 KB |
Output is correct |
10 |
Correct |
95 ms |
5484 KB |
Output is correct |
11 |
Correct |
94 ms |
5492 KB |
Output is correct |
12 |
Correct |
1 ms |
204 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
208 KB |
Output is correct |
2 |
Correct |
2 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
204 KB |
Output is correct |
4 |
Correct |
1 ms |
204 KB |
Output is correct |
5 |
Correct |
1 ms |
204 KB |
Output is correct |
6 |
Correct |
1 ms |
204 KB |
Output is correct |
7 |
Correct |
1 ms |
204 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
2 ms |
332 KB |
Output is correct |
10 |
Correct |
2 ms |
332 KB |
Output is correct |
11 |
Correct |
1 ms |
204 KB |
Output is correct |
12 |
Correct |
1 ms |
332 KB |
Output is correct |
13 |
Correct |
2 ms |
332 KB |
Output is correct |
14 |
Correct |
2 ms |
332 KB |
Output is correct |
15 |
Correct |
2 ms |
332 KB |
Output is correct |
16 |
Correct |
1 ms |
204 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
2 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
204 KB |
Output is correct |
4 |
Correct |
2 ms |
332 KB |
Output is correct |
5 |
Correct |
1 ms |
204 KB |
Output is correct |
6 |
Correct |
1 ms |
204 KB |
Output is correct |
7 |
Correct |
1 ms |
304 KB |
Output is correct |
8 |
Correct |
1 ms |
204 KB |
Output is correct |
9 |
Correct |
1 ms |
204 KB |
Output is correct |
10 |
Correct |
1 ms |
332 KB |
Output is correct |
11 |
Correct |
35 ms |
2548 KB |
Output is correct |
12 |
Correct |
69 ms |
4812 KB |
Output is correct |
13 |
Correct |
69 ms |
4772 KB |
Output is correct |
14 |
Correct |
71 ms |
4744 KB |
Output is correct |
15 |
Correct |
2 ms |
332 KB |
Output is correct |
16 |
Correct |
10 ms |
892 KB |
Output is correct |
17 |
Correct |
49 ms |
3024 KB |
Output is correct |
18 |
Correct |
101 ms |
5616 KB |
Output is correct |
19 |
Correct |
96 ms |
5620 KB |
Output is correct |
20 |
Correct |
2 ms |
332 KB |
Output is correct |
21 |
Correct |
10 ms |
896 KB |
Output is correct |
22 |
Correct |
48 ms |
3004 KB |
Output is correct |
23 |
Correct |
92 ms |
5356 KB |
Output is correct |
24 |
Correct |
93 ms |
5468 KB |
Output is correct |
25 |
Correct |
1 ms |
204 KB |
Output is correct |
26 |
Correct |
1 ms |
320 KB |
Output is correct |
27 |
Correct |
2 ms |
332 KB |
Output is correct |
28 |
Correct |
2 ms |
332 KB |
Output is correct |
29 |
Correct |
2 ms |
332 KB |
Output is correct |
30 |
Correct |
11 ms |
896 KB |
Output is correct |
31 |
Correct |
11 ms |
912 KB |
Output is correct |
32 |
Correct |
59 ms |
2880 KB |
Output is correct |
33 |
Correct |
54 ms |
3008 KB |
Output is correct |
34 |
Correct |
101 ms |
5336 KB |
Output is correct |
35 |
Correct |
96 ms |
5440 KB |
Output is correct |
36 |
Correct |
110 ms |
5512 KB |
Output is correct |
37 |
Correct |
109 ms |
5556 KB |
Output is correct |
38 |
Correct |
1 ms |
204 KB |
Output is correct |
39 |
Correct |
109 ms |
5600 KB |
Output is correct |
40 |
Correct |
104 ms |
5636 KB |
Output is correct |
41 |
Correct |
115 ms |
5504 KB |
Output is correct |
42 |
Correct |
97 ms |
5560 KB |
Output is correct |