답안 #81845

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
81845 2018-10-27T08:07:00 Z tmwilliamlin168 Lightning Conductor (POI11_pio) C++14
91 / 100
157 ms 23128 KB
#include <bits/stdc++.h>
using namespace std;

const int mxN=5e5;
int n, h[mxN], a1[mxN], a2[mxN], sr[1000001], qu[mxN];

double ix(int i, int j) {
	double a=(j-i)/2.0/(h[j]-h[i])-(h[j]-h[i])/2.0;
	return a*a+j;
}

void solve(int a[mxN]) {
	int qh=0, qt=0;
	for(int i=0; i<n; ++i) {
		if(!i||h[qu[qt-1]]<h[i]) {
			while(qt-qh>1&&(h[i]>=h[qu[qt-1]]+sr[i-qu[qt-1]]||ix(qu[qt-2], qu[qt-1])>ix(qu[qt-1], i)))
				--qt;
			qu[qt++]=i;
		}
		while(qt-qh>1&&h[qu[qh+1]]+sr[i-qu[qh+1]]>h[qu[qh]]+sr[i-qu[qh]])
			++qh;
		a[i]=h[qu[qh]]+sr[i-qu[qh]];
	}
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	for(int i=1; i<=1000; ++i)
		for(int j=(i-1)*(i-1)+1; j<=i*i; ++j)
			sr[j]=i;
	cin >> n;
	for(int i=0; i<n; ++i)
		cin >> h[i];
	solve(a1);
	for(int i=0; i<n-1-i; ++i)
		swap(h[i], h[n-1-i]);
	solve(a2);
	for(int i=0; i<n; ++i)
		cout << max(a1[i], a2[n-1-i])-h[n-1-i] << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 4344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 4452 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 4452 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 5008 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 18 ms 5448 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 5556 KB Output is correct
2 Correct 16 ms 5556 KB Output is correct
3 Correct 19 ms 5796 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 6144 KB Output is correct
2 Correct 27 ms 6144 KB Output is correct
3 Incorrect 26 ms 6656 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 58 ms 8336 KB Output is correct
2 Correct 96 ms 8336 KB Output is correct
3 Correct 51 ms 8848 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 95 ms 12048 KB Output is correct
2 Correct 87 ms 12048 KB Output is correct
3 Correct 108 ms 12204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 145 ms 15428 KB Output is correct
2 Correct 122 ms 17324 KB Output is correct
3 Correct 110 ms 23108 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 157 ms 23108 KB Output is correct
2 Correct 131 ms 23108 KB Output is correct
3 Correct 126 ms 23128 KB Output is correct