제출 #1276283

#제출 시각아이디문제언어결과실행 시간메모리
1276283altern23Fancy Fence (CEOI20_fancyfence)C++20
0 / 100
1 ms576 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<ll, ll> #define fi first #define sec second #define ld long double #pragma GCC optimize ("Ofast") #pragma GCC optimize ("unroll-loops") const int MAXN = 1e5; const ll INF = 1e18; const int MOD = 1e9 + 7; ll res = 0; ll H[MAXN + 5], W[MAXN + 5]; struct DSU{ ll N; vector<ll> par, val; DSU(ll _n){ N = _n; par.resize(N + 5), val.resize(N + 5); for(int i = 1; i <= N; i++) par[i] = i, val[i] = -1; } ll find(ll idx){ return (par[idx] == idx ? idx : par[idx] = find(par[idx])); } void join(ll a, ll b){ a = find(a), b = find(b); if(a == b) return; res -= (val[a] * (val[a] + 1) / 2 % MOD) + MOD; res %= MOD; res -= (val[b] * (val[b] + 1) / 2 % MOD) + MOD; res %= MOD; val[a] += val[b]; res += val[a] * (val[a] + 1) / 2 % MOD; res %= MOD; par[b] = a; } }; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tc = 1; // cin >> tc; for(;tc--;){ ll N; cin >> N; vector<pii> v; for(int i = 1; i <= N; i++){ cin >> H[i]; } for(int i = 1; i <= N; i++){ cin >> W[i]; v.push_back({H[i], i}); } sort(v.begin(), v.end()); DSU dsu(N); ll ans = 0; while(true){ ll cur = v.back().fi; while(!v.empty() && v.back().fi == cur){ res += W[v.back().sec] * (W[v.back().sec] + 1) / 2 % MOD; res %= MOD; dsu.val[v.back().sec] = W[v.back().sec]; if(v.back().sec > 1 && dsu.val[dsu.find(v.back().sec - 1)] != -1){ dsu.join(v.back().sec, v.back().sec - 1); } if(v.back().sec < N && dsu.val[dsu.find(v.back().sec + 1)] != -1){ dsu.join(v.back().sec, v.back().sec + 1); } v.pop_back(); } ans += res * cur % MOD; ans %= MOD; if(v.empty()) break; } 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...