Submission #1100033

#TimeUsernameProblemLanguageResultExecution timeMemory
1100033ocasuFancy Fence (CEOI20_fancyfence)C++17
12 / 100
1 ms600 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

const int m=1e9+7;

signed main(){
    int n; cin>>n;
    vector<int> h(n), w(n);
    for (int i=0; i<n; i++) cin>>h[i];
    for (int i=0; i<n; i++) cin>>w[i];
    vector<int> sumLeft(n,0), sumRight(n,0);
    stack<int> sL,sR;
    for (int i=0; i<n; i++){
        while (!sL.empty() and h[sL.top()]>h[i]){
            sumLeft[i]+=sumLeft[sL.top()]+w[sL.top()];
            sL.pop();
        }
        sL.push(i);
    }
    for (int i=n-1; i>=0; i--){
        while (!sR.empty() and h[sR.top()]>=h[i]){
            sumRight[i]+=sumRight[sR.top()]+w[sR.top()];
            sR.pop();
        }
        sR.push(i);
    }
    ///rwgrgw
    int ans=0;
    for (int i=0; i<n; i++){
        int hors = (sumLeft[i]*sumRight[i])%m + (sumLeft[i]*w[i])%m+(sumRight[i]*w[i])%m + ((w[i]*((w[i]-1))*500000004)%m)%m + w[i]%m;
        hors%=m;
        int verts = ((h[i]*((h[i]-1))*500000004)%m)%m + (h[i])%m;
        verts%=m;
        ans+=(hors*verts)%m;
        ans%=m;
    }
    cout<<ans<<'\n';

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...