답안 #204038

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
204038 2020-02-24T01:31:04 Z savacska Fire (JOI20_ho_t5) C++14
1 / 100
1000 ms 19320 KB
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define x first
#define y second

using namespace std;

typedef long long ll;

const int CS = 400;

ll summa[200005], pref[200005], answer[200005], leng[CS + 5][CS + 5];
int mas[200005], maxim[200005];
vector <pair <int, int> > zapr[200005];

int main()
{
 	//freopen("input.txt", "r", stdin);
 	//freopen("output.txt", "w", stdout);
 	ios_base::sync_with_stdio(0); cin.tie(0);

 	int n, quer;
 	cin >> n >> quer;
 	for (int i = 1; i <= n; i++) cin >> mas[i];
 	for (int i = 1; i <= quer; i++)
 	{
 	 	int tim, lef, rig;
 	 	cin >> tim >> lef >> rig;
 	 	zapr[rig].pb(mp(tim, i));
 	 	zapr[lef - 1].pb(mp(tim, -i));
 	}

 	for (int i = 1; i <= (n - 1) / CS + 1; i++)
 	{
 	 	int lef = (i - 1) * CS + 1, rig = min(n, i * CS);
 	 	for (int j = 0; j <= n; j++) summa[j] = 0;
 	 	for (int j = 0; j <= CS; j++)
 	 		for (int z = 0; z <= CS; z++)
 	 			leng[j][z] = 0;

 	   	int uk = lef, tekmax = mas[lef], cur = mas[lef - 1];
 	   	for (int j = lef - 1; j >= 1; j--)
 	   	{
 	   		cur = max(cur, mas[j]);
 	   		maxim[j] = cur;
 	   		while (uk <= rig && tekmax < cur)
 	   		{
 	   			uk++;
 	   			tekmax = max(tekmax, mas[uk]);
 	   		}
 	   		summa[lef - j] += (ll) cur, summa[uk - j] -= (ll) cur;
 	   	}
 	   	for (int j = 0; j >= lef - n; j--)
 	   	{
 	   	 	summa[lef - j] += (ll) cur;
 	   	 	summa[min(uk - j, n + 1)] -= (ll) cur;
 	   	}

 	   	uk = lef - 1, tekmax = mas[lef - 1], cur = mas[lef];
 	   	for (int j = lef; j <= rig; j++)
 	   	{
 	   	 	cur = max(cur, mas[j]);
 	   	 	maxim[j] = cur;
 	   	 	while (uk > 0 && tekmax <= cur)
 	   	 	{
 	   	 		uk--;
 	   	 		tekmax = max(tekmax, mas[uk]); 	
 	   	 	}
 	   	 	if (uk == 0) summa[j - uk] += (ll) cur, summa[n + 1] -= (ll) cur;
 	   	 	summa[j - lef + 1] += (ll) cur, summa[j - uk] -= (ll) cur;
 	   	}
 	   	for (int j = 1; j <= n; j++) summa[j] += summa[j - 1];
 	   	
 	   	for (int j = lef; j <= rig; j++)
 	   	{
 	   		int mx = mas[j];
 	   		for (int z = j; z <= rig; z++)
 	   		{
 	   		 	mx = max(mx, mas[z]);
 	   		 	summa[z - j] += (ll) mx;
 	   		 	leng[z - j][z - lef] += (ll) mx;
 	   		}
 	   	}
 	   	for (int j = 0; j <= rig - lef; j++)
 	   		for (int z = 1; z <= rig - lef; z++)
 	   			leng[j][z] += leng[j][z - 1];

 	   	for (int j = lef; j <= rig; j++)
 	   	{
 	   	 	for (int z = 0; z < (int) zapr[j].size(); z++)
 	   	 	{
 	   	 	 	int tim = zapr[j][z].x, num = zapr[j][z].y;
 	   	 	 	if (num > 0) answer[num] += pref[tim];
 	   	 	 	else answer[-num] -= pref[tim];

 	   	 	 	ll ans = 0;
 	   	 	 	if (tim <= CS)
 	   	 	 	{
 	   	 	 		for (int k = lef; k <= min (j, lef + tim - 1); k++) ans += (ll) max(maxim[k], maxim[max(k - tim, 1)]);
 	   	 	 		if (j - tim >= lef) ans += leng[tim][j - lef];
 	   	 	 	}
 	   	 	 	else
 	   	 	 	{
 	   	 	 	 	for (int k = lef; k <= j; k++) ans += (ll) max(maxim[k], maxim[max(k - tim, 1)]);
 	   	 	 	}
 	   	 	 	if (num > 0) answer[num] += ans;
 	   	 	 	else answer[-num] -= ans;
 	   	 	}
 	   	}

 	   	for (int j = 0; j <= n; j++) pref[j] += summa[j];
 	}

 	for (int i = 1; i <= quer; i++) cout << answer[i] << '\n';
 	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 6264 KB Output is correct
2 Correct 9 ms 6392 KB Output is correct
3 Correct 8 ms 6392 KB Output is correct
4 Correct 8 ms 6392 KB Output is correct
5 Correct 8 ms 6396 KB Output is correct
6 Correct 9 ms 6392 KB Output is correct
7 Correct 10 ms 6392 KB Output is correct
8 Correct 8 ms 6392 KB Output is correct
9 Correct 8 ms 6392 KB Output is correct
10 Correct 8 ms 6392 KB Output is correct
11 Correct 9 ms 6392 KB Output is correct
12 Correct 8 ms 6396 KB Output is correct
13 Correct 8 ms 6392 KB Output is correct
14 Correct 9 ms 6392 KB Output is correct
15 Correct 8 ms 6392 KB Output is correct
16 Correct 8 ms 6392 KB Output is correct
17 Correct 8 ms 6392 KB Output is correct
18 Correct 8 ms 6392 KB Output is correct
19 Correct 8 ms 6392 KB Output is correct
20 Correct 9 ms 6392 KB Output is correct
21 Correct 9 ms 6392 KB Output is correct
22 Correct 9 ms 6444 KB Output is correct
23 Correct 8 ms 6392 KB Output is correct
24 Correct 9 ms 6284 KB Output is correct
25 Correct 9 ms 6392 KB Output is correct
26 Correct 9 ms 6392 KB Output is correct
27 Correct 10 ms 6392 KB Output is correct
28 Correct 9 ms 6392 KB Output is correct
29 Correct 9 ms 6392 KB Output is correct
30 Correct 9 ms 6392 KB Output is correct
31 Correct 8 ms 6392 KB Output is correct
32 Correct 9 ms 6392 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 6264 KB Output is correct
2 Execution timed out 1097 ms 18936 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 6264 KB Output is correct
2 Execution timed out 1081 ms 19320 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1095 ms 18860 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 6264 KB Output is correct
2 Correct 9 ms 6392 KB Output is correct
3 Correct 8 ms 6392 KB Output is correct
4 Correct 8 ms 6392 KB Output is correct
5 Correct 8 ms 6396 KB Output is correct
6 Correct 9 ms 6392 KB Output is correct
7 Correct 10 ms 6392 KB Output is correct
8 Correct 8 ms 6392 KB Output is correct
9 Correct 8 ms 6392 KB Output is correct
10 Correct 8 ms 6392 KB Output is correct
11 Correct 9 ms 6392 KB Output is correct
12 Correct 8 ms 6396 KB Output is correct
13 Correct 8 ms 6392 KB Output is correct
14 Correct 9 ms 6392 KB Output is correct
15 Correct 8 ms 6392 KB Output is correct
16 Correct 8 ms 6392 KB Output is correct
17 Correct 8 ms 6392 KB Output is correct
18 Correct 8 ms 6392 KB Output is correct
19 Correct 8 ms 6392 KB Output is correct
20 Correct 9 ms 6392 KB Output is correct
21 Correct 9 ms 6392 KB Output is correct
22 Correct 9 ms 6444 KB Output is correct
23 Correct 8 ms 6392 KB Output is correct
24 Correct 9 ms 6284 KB Output is correct
25 Correct 9 ms 6392 KB Output is correct
26 Correct 9 ms 6392 KB Output is correct
27 Correct 10 ms 6392 KB Output is correct
28 Correct 9 ms 6392 KB Output is correct
29 Correct 9 ms 6392 KB Output is correct
30 Correct 9 ms 6392 KB Output is correct
31 Correct 8 ms 6392 KB Output is correct
32 Correct 9 ms 6392 KB Output is correct
33 Execution timed out 1085 ms 19040 KB Time limit exceeded
34 Halted 0 ms 0 KB -