Submission #701501

#TimeUsernameProblemLanguageResultExecution timeMemory
701501PCTprobabilityFancy Fence (CEOI20_fancyfence)C++17
73 / 100
89 ms6060 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const ll mod = 1000000007; #define fi first #define se second int main(){ ll n; cin>>n; vector<ll> a(n),b(n); for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) cin>>b[i]; ll ans=0; for(int i=0;i<n;i++) (ans+=((b[i]*(b[i]+1))/2%mod)*((a[i]*(a[i]+1)/2)%mod))%=mod; ans%=mod; vector<pair<ll,ll>> s; ll sum=0; for(int i=0;i<n;i++){ if(i==0){ s.push_back({a[i],b[i]}); sum+=(a[i]*(a[i]+1)/2)%mod*b[i]; sum%=mod; continue; } ll sum2=b[i]; while(s.size()&&s.back().fi>a[i]){ sum2+=s.back().se; sum-=(s.back().fi*(s.back().fi+1)/2%mod)*s.back().se%mod; sum%=mod; sum+=mod; sum%=mod; s.pop_back(); } ans+=sum*b[i]; ans+=(a[i]*(a[i]+1)/2%mod)*(sum2-b[i]+mod)%mod*b[i]%mod; sum+=(a[i]*(a[i]+1)/2)%mod*sum2%mod; sum%=mod; ans%=mod; s.push_back({a[i],sum2%mod}); } cout<<ans<<endl; }
#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...