제출 #1147944

#제출 시각아이디문제언어결과실행 시간메모리
1147944LeonidCukFancy Fence (CEOI20_fancyfence)C++20
100 / 100
52 ms2744 KiB
#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 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...