답안 #944803

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
944803 2024-03-13T05:45:35 Z dsyz Fancy Fence (CEOI20_fancyfence) C++17
0 / 100
1 ms 2592 KB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define MAXN (1000005)
ll ans = 0, cursum = 0, mod = 1e9 + 7;
ll parent[MAXN], SIZE[MAXN];
ll find_set(ll x){
	if(parent[x] == x) return x;
	parent[x] = find_set(parent[x]);
	return parent[x];
}
bool same_set(ll x,ll y){
	return find_set(x) == find_set(y);
}
void merge_set(ll x,ll y){
	if(same_set(x,y)) return;
	ll Xsize = SIZE[find_set(x)], Ysize = SIZE[find_set(y)];
	cursum -= (((Xsize + 1) * Xsize) / 2);
	cursum -= (((Ysize + 1) * Ysize) / 2);
	cursum = (cursum + mod) % mod;
	ll totalsize = Xsize + Ysize;
	cursum += (((totalsize + 1) * totalsize) / 2);
	cursum = (cursum + mod) % mod;
	parent[find_set(x)] = find_set(y);
	SIZE[find_set(x)] = totalsize;
}
int main() {
	ios_base::sync_with_stdio(false);cin.tie(0);
	ll N;
	cin>>N;
	pair<pair<ll,ll>,ll> arr[N];
	for(ll i = 0;i < N;i++){
		cin>>arr[i].first.first; //H[i]
	}
	for(ll i = 0;i < N;i++){
		cin>>arr[i].first.second; //W[i]
	}
	for(ll i = 0;i < N;i++){
		arr[i].second = i;
		parent[i] = i;
		SIZE[i] = arr[i].first.second;
	}
	set<ll,greater<ll> > heights;
	for(ll i = 0;i < N;i++){
		heights.insert(arr[i].first.first);
	}
	sort(arr,arr + N,greater<pair<pair<ll,ll>,ll> >());
	bool can[N];
	memset(can,0,sizeof(can));
	ll ptr = -1;
	for(auto h : heights){
		while(ptr + 1 < N && arr[ptr + 1].first.first == h){
			ptr++;
			ll ind = arr[ptr].second;
			can[ind] = 1;
			cursum += (((arr[ptr].first.second + 1) * arr[ptr].first.second) / 2);
			cursum = (cursum + mod) % mod;
			if(ind >= 1 && can[ind - 1]){
				merge_set(ind - 1,ind);
			}
			cursum = (cursum + mod) % mod;
			if(ind < N - 1 && can[ind + 1]){
				merge_set(ind,ind + 1);
			}
			cursum = (cursum + mod) % mod;
		}
		ans += (cursum * h);
		ans %= mod;
	}
	cout<<ans % mod<<'\n';
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Incorrect 1 ms 2396 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2392 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Incorrect 1 ms 2396 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2396 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Incorrect 1 ms 2396 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2396 KB Output is correct
2 Incorrect 1 ms 2592 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Incorrect 1 ms 2396 KB Output isn't correct
3 Halted 0 ms 0 KB -