문제

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	
	vector<int> pos;
	vector<int> neg;
	int zeros = 0;
	int posPtr = 0, negPtr = 0, posSize, negSize, N, i, tmp;
	long long answer = 0;

	cin >> N;
	
	for (i = 0; i < N; i++) {
		cin >> tmp;
		if (tmp > 0) pos.push_back(tmp);
		else if (tmp == 0) zeros++;
		else neg.push_back(tmp);
	}

	// 절댓값의 내림차순으로 각각 정렬
	sort(pos.begin(), pos.end(), greater<int>());
	sort(neg.begin(), neg.end());
	
	posSize = pos.size();
	negSize = neg.size();

	// 1이 나오기 전까지, 그리고 두 개씩 묶을 수 있을 때까지
	while (posPtr + 1 < posSize && pos[posPtr] != 1 && pos[posPtr + 1] != 1) {
		answer += pos[posPtr] * pos[posPtr + 1];
		posPtr += 2;
	}
	
	// 두 개씩 묶을 수 있을 때까지
	while (negPtr + 1 < negSize) {
		answer += neg[negPtr] * neg[negPtr + 1];
		negPtr += 2;
	}
	
	// 남는 음수가 있는데 그거랑 곱해줄 0이 없는 경우 음수 더해주기
	if (negSize % 2 == 1 && zeros == 0) answer += neg[negSize - 1];
	
	// 남는 양수는 싹 다 더해줌
	while (posPtr < posSize) {
		answer += pos[posPtr];
		posPtr++;
	}

	cout << answer << endl;
	return 0;
}