Submission #500605

#TimeUsernameProblemLanguageResultExecution timeMemory
500605kderyloFancy Fence (CEOI20_fancyfence)C++14
100 / 100
35 ms6316 KiB
#include <iostream>
#include <vector>
using namespace std;
const long long mod=1e9+7;
const int stala=1e5+10;
long long wysokosci[stala];
long long szerokosci[stala];
vector<long long>h;
vector<long long>w;
vector<long long>war;
long long odejmij(long long a)
{
    if(a<0)
    {
        return a+mod;
    }
    else
    {
        return a;
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int ile;
    cin>>ile;
    for(int i=1;i<=ile;i++)
    {
        cin>>wysokosci[i];
    }
    for(int i=1;i<=ile;i++)
    {
        cin>>szerokosci[i];
    }
    long long suma=0;
    long long wyn=0;
    for(int i=1;i<=ile;i++)
    {
        long long width=0;
        while(!h.empty()&&h.back()>=wysokosci[i])
        {
            width+=w.back();
            width%=mod;
            suma=odejmij(suma-war.back());
            h.pop_back();
            w.pop_back();
            war.pop_back();
        }
        long long pom=(wysokosci[i]*(wysokosci[i]+1))/2;
        pom%=mod;
        pom*=width;
        pom%=mod;
        wyn+=pom*szerokosci[i];
        wyn%=mod;

        pom=(wysokosci[i]*(wysokosci[i]+1))/2;
        pom%=mod;
        long long pom2=(szerokosci[i]*(szerokosci[i]+1))/2;
        pom2%=mod;
        pom*=pom2;
        pom%=mod;
        wyn+=pom;
        wyn%=mod;

        width+=szerokosci[i];
        pom=(wysokosci[i]*(wysokosci[i]+1))/2;
        pom%=mod;
        pom*=width;
        pom%=mod;

        wyn+=suma*szerokosci[i];
        wyn%=mod;
        suma+=pom;
        suma%=mod;
        h.push_back(wysokosci[i]);
        w.push_back(width);
        war.push_back(pom);
    }
    cout<<wyn;

    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...