Submission #528307

#TimeUsernameProblemLanguageResultExecution timeMemory
528307DeepessonFancy Fence (CEOI20_fancyfence)C++17
100 / 100
83 ms3864 KiB
#include <bits/stdc++.h> using ll = long long; const ll MOD = 1e9+7; typedef std::pair<ll,ll> pii; ll gaussian(ll x){ return ((x*(x+1LL))/2LL)%MOD; } ll get_local(pii u){ return (gaussian(u.first)*gaussian(u.second))%MOD; } ll get_total(pii u){ return (gaussian(u.first)*u.second)%MOD; } int main() { ll ans=0; ll temp=0; int N;std::cin>>N; long long a[N],b[N]; for(auto&x:a)std::cin>>x; for(auto&x:b)std::cin>>x; std::deque<pii> stack; for(int i=0;i!=N;++i){ ll alpha=a[i],beta=b[i]; pii local = {alpha,beta}; ans=(ans+get_local(local))%MOD; ll k=0; while(stack.size()){ auto __ = stack.back(); if(__.first>=alpha){ k=(k+stack.back().second)%MOD; temp-=get_total(stack.back()); if(temp<0)temp+=MOD; local.second=(local.second+stack.back().second)%MOD; stack.pop_back(); }else break; } ans=(ans+(((k*b[i])%MOD)*gaussian(alpha)))%MOD; ans=((((temp*b[i])+ans)%MOD))%MOD; stack.push_back(local); temp=(temp+get_total(local))%MOD; } std::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...