답안 #591635

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
591635 2022-07-07T17:15:06 Z blue Election (BOI18_election) C++17
0 / 100
3 ms 340 KB
#include <iostream>
#include <vector>
using namespace std;

using vi = vector<int>;

const int inf = 1'000'000'000;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int N;
	cin >> N;

	vi A(1+N);
	for(int i = 1; i <= N; i++)
	{
		char c;
		cin >> c;

		if(c == 'T')
			A[i] = +1;
		else
			A[i] = -1;
	}

	vi p(1+N);
	p[0] = 0;
	for(int i = 1; i <= N; i++)
		p[i] = p[i-1] + A[i];

	vi s(1+N);
	s[N] = 0;
	for(int i = N-1; i >= 0; i--)
		s[i] = s[i+1] + A[i+1];



	int Q;
	cin >> Q;

	for(int q = 1; q <= Q; q++)
	{
		int l, r;
		cin >> l >> r;

		int pmx = -inf;
		for(int i = l-1; i <= r; i++)
		{
			pmx = max(pmx, p[i]);
		}

		int c1 = pmx - p[l-1];

		// cerr << "c1 = " << c1 << '\n';
		// cerr << "pmx = " << pmx << '\n';


		// int c2 = 0;
		int res = 0;


		int currpmax = -inf;
		for(int i = l-1; i <= r; i++)
		{
			currpmax = max(currpmax, p[i]);
			// cerr << i << " : " << s[i] - s[r] << " " << currpmax << '\n';
			// cerr << "maximum occ = " << currpmax - pmx << '\n';
			// c2 = min(c2, max(0, s[i] - s[r]) + currpmax - pmx);



			if(s[i] > s[r])
			{
				// cerr << "! " << s[i]-s[r] << ' ' << (pmx - currpmax) << '\n';
				res = max(res, (s[i] - s[r]) + currpmax);
			}
		}

		res -= p[l-1];

		res = max(res, c1);

		cout << res << '\n';


	}
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -