# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
598272 | _Avocado_ | Fancy Fence (CEOI20_fancyfence) | C++14 | 49 ms | 6656 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define int int64_t
using namespace std;
int mod = 1e9+7;
int ans = 0;
int sum(int n){
n %= mod;
return (((n*(n+1)))/2)%mod;
}
int find(int a, auto&par){
if(a == par[a]) return a;
return par[a] = find(par[a], par);
}
void unite(int a, int b, int h, auto&par, auto&w){
a = find(a, par);
b = find(b, par);
int minus = (((sum(w[a]) * sum(h))%mod) + (sum(w[b]) * sum(h)))%mod;
//cout<<"minus "<<minus<<endl;
ans = (ans + ((sum(w[a] + w[b]) * sum(h))%mod - minus + mod)%mod)%mod;
par[b] = a;
w[a] = (w[a] + w[b])%mod;
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
//ifstream cin ("input.in");
//ofstream cout ("output.out");
int n; cin>>n;
vector<pair<int, int>>height(n);
vector<int>w(n);
for(int i = 0; i<n; ++i){
int a; cin>>a;
height[i] = {a, i};
}
for(auto&u: w) cin>>u;
for(int i = 0; i<n; ++i){
ans = (ans + (sum(height[i].first) * sum(w[i]))%mod)%mod;
}
//cout<<ans<<endl;
vector<int>par(n);
iota(par.begin(), par.end(), 0);
vector<int>fred(n);
sort(height.begin(), height.end());
reverse(height.begin(), height.end());
for(int i = 0; i<n; ++i){
int cur = height[i].second;
if(cur != 0 && fred[cur-1]) unite(cur, cur-1, height[i].first, par, w);
if(cur != n-1 && fred[cur+1]) unite(cur, cur+1, height[i].first, par, w);
fred[cur] = 1;
}
cout<<ans;
cout<<'\n';
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |