#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#include <algorithm>
#include <assert.h>
#include <bitset>
#include <cfloat>
#include <complex>
#include <deque>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <limits.h>
#include <list>
#include <map>
#include <math.h>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <string>
#include <string.h>
#include <time.h>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#define rep(i,n) for(int i=0;i<n;i++)
#define REP(i,n) for(int i=1;i<=n;i++)
#define ll long long
#define eps LDBL_EPSILON
#define mod (int)1000000007
#define INF INT_MAX/10
#define P pair<int,int>
#define prique(T) priority_queue<T,vector<T>,greater<T>>
#define all(V) V.begin(),V.end()
using namespace std;

class ConvexHullTrick {
	bool minOrMax, lineMonotone;
	class Line {
	public:
		int a, b;
		bool isquery;
		mutable std::function<const Line * ()> getSuc;
		bool operator<(const Line& x) const {
			if (isquery) {
				const Line* suc = next(this);
				if (suc == nullptr) return true;
				return (suc->a - x.a) * a + suc->b - x.b > 0;
			}
			if (x.isquery) {
				const Line* suc = next(this);
				if (suc == nullptr) return false;
				return (suc->a - a) * x.a + suc->b - b < 0;
			}
			return a < x.a;
		}
	};
	bool isbad(const set<Line>::iterator x) {
		if (x == st.begin() || next(x) == st.end())return false;
		auto pre = prev(x), nex = next(x);
		if (((*x).b - (*pre).b) * ((*nex).a - (*x).a) >= ((*nex).b - (*x).b) * ((*x).a - (*pre).a))return true;
		return false;
	}
	bool isbad(const vector<Line>::iterator x) {
		if (x == vec.begin() || next(x) == vec.end())return false;
		auto pre = prev(x), nex = next(x);
		if (((*x).b - (*pre).b) * ((*nex).a - (*x).a) >= ((*nex).b - (*x).b) * ((*x).a - (*pre).a))return true;
		return false;
	}
	set<Line> st;
	vector<Line> vec;
public:
	ConvexHullTrick(bool minormax = false, bool lineMonotone = false) :minOrMax(minormax), lineMonotone(lineMonotone) {}
	void addLine(int a, int b) {
		if (minOrMax) {
			a = -a; b = -b;
		}
		if (!lineMonotone) {
			auto pos = st.lower_bound({ a,-INF,false });
			if (pos != st.end()) {
				if ((*pos).a == a) {
					if ((*pos).b <= b)return;
					st.erase(pos);
				}
			}
			auto ite = st.insert({ a,b,false }).first;
			ite->getSuc = [=] {return next(ite) == st.end() ? nullptr : &*next(ite); };
			if (isbad(ite)) {
				st.erase(ite);
				return;
			}
			while (next(ite) != st.end() && isbad(next(ite)))st.erase(next(ite));
			while (ite != st.begin() && isbad(prev(ite)))st.erase(prev(ite));
		}
		else {
			if (!vec.empty()) {
				if (vec.back().a > a) {
					cerr << "Line additions are not monotone" << endl;
					exit(1);
				}
				if (vec.back().a == a) {
					if (vec.back().b <= b)return;
					vec.pop_back();
				}
			}
			vec.push_back({ a,b,false });
			auto ite = --vec.end();
			int index = vec.size() - 1;
			ite->getSuc = [this, index] {cout << vec.size() << endl; return index == vec.size() - 1 ? nullptr : &*(vec.begin() + index + 1); };
			while (ite != vec.begin() && isbad(prev(ite))) {
				*prev(ite) = vec.back();
				vec.pop_back();
				ite = --vec.end();
			}
		}
	}
	int query(int x) {
		if (!lineMonotone) {
			auto l = *st.lower_bound(Line{ x, 0,true });
			if (!minOrMax)return l.a * x + l.b;
			else return -l.a * x - l.b;
		}
		else {
			auto l = *lower_bound(vec.begin(), vec.end() - 1, Line({ x,0,true }));
			if (!minOrMax)return l.a * x + l.b;
			else return -l.a * x - l.b;
		}
	}
};

//COLOCON2018Final-C
int n, a[200010];
signed main() {
	ConvexHullTrick cht(false, true);
	cin >> n;
	rep(i, n)cin >> a[i];
	for (int i = n - 1; i >= 0; i--)cht.addLine(-2 * i, a[i] + i * i);
	rep(i, n) {
		cout << cht.query(i) + i * i << endl;
	}
	return 0;
}