답안 #615503

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
615503 2022-07-31T09:57:06 Z 장태환(#8493) Sprinkler (JOI22_sprinkler) C++17
41 / 100
4000 ms 71324 KB
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
int N, L;
int qs, qe, n;
struct st
{
	vector<long long>r;
	int treeN;
	void init(int cnt)
	{
		for (treeN = 1; treeN < cnt; treeN *= 2);
		r.resize(2 * treeN + 2, 1);
	}
	void upd(int s, int e, int i = 1)
	{
		if (s > qe || qs > e)
			return;
		if (qs <= s && e <= qe)
		{
			r[i] *= n;
			if (r[i] >= L)
				r[i] %= L;
			return;
		}
		upd(s, (s + e) / 2, i * 2);
		upd((s + e) / 2 + 1, e, i * 2 + 1);
	}
	int ge(int qs, int qe, int n, int i = 1)
	{
		if (qs == qe)
		{
			return r[i];
		}
		int m = (qs + qe) / 2;
		if (n > m)
		{
			return r[i] * ge(m + 1, qe, n, i * 2 + 1) % L;
		}
		else
		{
			return r[i] * ge(qs, m, n, i * 2) % L;
		}
	}
}arr[200100];
int d[201000];
int pos[200100];
int par[200100];
int st[201000];
int en[200100];
int c;
vector<int>li[201000];
vector<pair<int, int>>dl[200100];
vector<int>dl2[200100];
void dfs(int n, int p = 0)
{
	st[n] = ++c;
	dl[d[n]].push_back({ st[n],n });
	dl2[d[n]].push_back(st[n]);
	int i;
	for (i = 0; i < li[n].size(); i++)
	{
		if (li[n][i] == p)
			continue;
		par[li[n][i]] = n;
		d[li[n][i]] = d[n] + 1;
		dfs(li[n][i], n);
	}
	en[n] = c;
}
signed main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin >> N >> L;
	int i;
	for (i = 1; i < N; i++)
	{
		int a, b;
		cin >> a >> b;
		li[a].push_back(b);
		li[b].push_back(a);
	}
	dfs(1);
	for (i = 0; i <= N; i++)
	{
		arr[i].init(dl[i].size());
		int j;
		for (j = 0; j < dl[i].size(); j++)
		{
			pos[dl[i][j].second] = j;
		}
	}
	for (i = 1; i <= N; i++)
	{
		int a;
		cin >> a;
		arr[d[i]].r[pos[i] + arr[d[i]].treeN] = a;
	}
	int Q;
	cin >> Q;
	while (Q--)
	{
		int a;
		cin >> a;
		if (a == 1)
		{
			int b, c, w;
			cin >> b >> c >> w;
			int j;
			int dp = d[b];
			int cp = b;
			for (j = dp + c; j >= dp - c; j--)
			{
				if (j + dp - d[cp] * 2 + 2 <= c && cp != 1)
				{
					cp = par[cp];
				}
				if (j < 0)
					break;
				int lp = lower_bound(dl2[j].begin(), dl2[j].end(), st[cp]) - dl2[j].begin();
				if (lp != dl2[j].size() && dl2[j][lp] <= en[cp])
				{
					int rp = lower_bound(dl2[j].begin() + lp, dl2[j].end(), en[cp] + 1) - dl2[j].begin() - 1;
					qs = lp;
					qe = rp;
					n = w;
					arr[j].upd(0, arr[j].treeN - 1);
				}

			}
		}
		else
		{
			int b;
			cin >> b;
			cout << arr[d[b]].ge(0, arr[d[b]].treeN - 1, pos[b]) << '\n';
		}
	}

}

Compilation message

sprinkler.cpp: In function 'void dfs(int, int)':
sprinkler.cpp:62:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |  for (i = 0; i < li[n].size(); i++)
      |              ~~^~~~~~~~~~~~~~
sprinkler.cpp: In function 'int main()':
sprinkler.cpp:91:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   91 |   for (j = 0; j < dl[i].size(); j++)
      |               ~~^~~~~~~~~~~~~~
sprinkler.cpp:124:12: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  124 |     if (lp != dl2[j].size() && dl2[j][lp] <= en[cp])
      |         ~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 20692 KB Output is correct
2 Correct 11 ms 20692 KB Output is correct
3 Correct 11 ms 20692 KB Output is correct
4 Correct 12 ms 20820 KB Output is correct
5 Correct 12 ms 20820 KB Output is correct
6 Correct 13 ms 20836 KB Output is correct
7 Correct 11 ms 20788 KB Output is correct
8 Correct 16 ms 20856 KB Output is correct
9 Correct 12 ms 20692 KB Output is correct
10 Correct 11 ms 20736 KB Output is correct
11 Correct 10 ms 20692 KB Output is correct
12 Correct 11 ms 20708 KB Output is correct
13 Correct 10 ms 20692 KB Output is correct
14 Correct 12 ms 20696 KB Output is correct
15 Correct 12 ms 20732 KB Output is correct
16 Correct 11 ms 20692 KB Output is correct
17 Correct 11 ms 20692 KB Output is correct
18 Correct 11 ms 20692 KB Output is correct
19 Correct 11 ms 20656 KB Output is correct
20 Correct 13 ms 20648 KB Output is correct
21 Correct 11 ms 20692 KB Output is correct
22 Correct 11 ms 20692 KB Output is correct
23 Correct 11 ms 20632 KB Output is correct
24 Correct 14 ms 20692 KB Output is correct
25 Correct 12 ms 20692 KB Output is correct
26 Correct 11 ms 20692 KB Output is correct
27 Correct 10 ms 20692 KB Output is correct
28 Correct 13 ms 20652 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 20692 KB Output is correct
2 Correct 400 ms 51892 KB Output is correct
3 Correct 555 ms 48848 KB Output is correct
4 Correct 484 ms 61436 KB Output is correct
5 Correct 427 ms 50528 KB Output is correct
6 Correct 471 ms 49600 KB Output is correct
7 Correct 484 ms 49520 KB Output is correct
8 Correct 412 ms 49448 KB Output is correct
9 Correct 493 ms 71324 KB Output is correct
10 Correct 582 ms 66132 KB Output is correct
11 Correct 512 ms 51756 KB Output is correct
12 Correct 773 ms 48844 KB Output is correct
13 Correct 370 ms 48532 KB Output is correct
14 Correct 538 ms 49084 KB Output is correct
15 Correct 537 ms 48632 KB Output is correct
16 Correct 510 ms 48796 KB Output is correct
17 Correct 690 ms 48748 KB Output is correct
18 Correct 13 ms 20692 KB Output is correct
19 Correct 11 ms 20636 KB Output is correct
20 Correct 13 ms 20644 KB Output is correct
21 Correct 12 ms 20724 KB Output is correct
22 Correct 13 ms 20736 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 20692 KB Output is correct
2 Correct 400 ms 51892 KB Output is correct
3 Correct 555 ms 48848 KB Output is correct
4 Correct 484 ms 61436 KB Output is correct
5 Correct 427 ms 50528 KB Output is correct
6 Correct 471 ms 49600 KB Output is correct
7 Correct 484 ms 49520 KB Output is correct
8 Correct 412 ms 49448 KB Output is correct
9 Correct 493 ms 71324 KB Output is correct
10 Correct 582 ms 66132 KB Output is correct
11 Correct 512 ms 51756 KB Output is correct
12 Correct 773 ms 48844 KB Output is correct
13 Correct 370 ms 48532 KB Output is correct
14 Correct 538 ms 49084 KB Output is correct
15 Correct 537 ms 48632 KB Output is correct
16 Correct 510 ms 48796 KB Output is correct
17 Correct 690 ms 48748 KB Output is correct
18 Correct 13 ms 20692 KB Output is correct
19 Correct 11 ms 20636 KB Output is correct
20 Correct 13 ms 20644 KB Output is correct
21 Correct 12 ms 20724 KB Output is correct
22 Correct 13 ms 20736 KB Output is correct
23 Correct 15 ms 20684 KB Output is correct
24 Correct 519 ms 51636 KB Output is correct
25 Correct 841 ms 48704 KB Output is correct
26 Correct 515 ms 68612 KB Output is correct
27 Correct 594 ms 50284 KB Output is correct
28 Correct 636 ms 49764 KB Output is correct
29 Correct 843 ms 50196 KB Output is correct
30 Correct 566 ms 49424 KB Output is correct
31 Correct 613 ms 63800 KB Output is correct
32 Correct 679 ms 66100 KB Output is correct
33 Correct 518 ms 51932 KB Output is correct
34 Correct 927 ms 48492 KB Output is correct
35 Correct 14 ms 20736 KB Output is correct
36 Correct 16 ms 20736 KB Output is correct
37 Correct 16 ms 20660 KB Output is correct
38 Correct 14 ms 20736 KB Output is correct
39 Correct 12 ms 20692 KB Output is correct
40 Correct 11 ms 20692 KB Output is correct
41 Correct 11 ms 20740 KB Output is correct
42 Correct 14 ms 20692 KB Output is correct
43 Correct 11 ms 20692 KB Output is correct
44 Correct 11 ms 20692 KB Output is correct
45 Correct 11 ms 20692 KB Output is correct
46 Correct 12 ms 20692 KB Output is correct
47 Correct 13 ms 20680 KB Output is correct
48 Correct 11 ms 20720 KB Output is correct
49 Correct 12 ms 20728 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 20692 KB Output is correct
2 Correct 683 ms 68092 KB Output is correct
3 Correct 3014 ms 61564 KB Output is correct
4 Correct 1319 ms 63092 KB Output is correct
5 Correct 2676 ms 48544 KB Output is correct
6 Correct 1847 ms 48152 KB Output is correct
7 Correct 1297 ms 48740 KB Output is correct
8 Correct 559 ms 47844 KB Output is correct
9 Correct 903 ms 61196 KB Output is correct
10 Correct 2750 ms 65404 KB Output is correct
11 Correct 1419 ms 49164 KB Output is correct
12 Execution timed out 4083 ms 48260 KB Time limit exceeded
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 20640 KB Output is correct
2 Correct 794 ms 62840 KB Output is correct
3 Correct 2894 ms 56264 KB Output is correct
4 Correct 1414 ms 60080 KB Output is correct
5 Correct 2825 ms 50292 KB Output is correct
6 Correct 2819 ms 49936 KB Output is correct
7 Correct 1708 ms 49120 KB Output is correct
8 Correct 448 ms 49256 KB Output is correct
9 Correct 850 ms 69356 KB Output is correct
10 Correct 2650 ms 66452 KB Output is correct
11 Correct 1394 ms 51648 KB Output is correct
12 Execution timed out 4030 ms 48520 KB Time limit exceeded
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 20692 KB Output is correct
2 Correct 11 ms 20692 KB Output is correct
3 Correct 11 ms 20692 KB Output is correct
4 Correct 12 ms 20820 KB Output is correct
5 Correct 12 ms 20820 KB Output is correct
6 Correct 13 ms 20836 KB Output is correct
7 Correct 11 ms 20788 KB Output is correct
8 Correct 16 ms 20856 KB Output is correct
9 Correct 12 ms 20692 KB Output is correct
10 Correct 11 ms 20736 KB Output is correct
11 Correct 10 ms 20692 KB Output is correct
12 Correct 11 ms 20708 KB Output is correct
13 Correct 10 ms 20692 KB Output is correct
14 Correct 12 ms 20696 KB Output is correct
15 Correct 12 ms 20732 KB Output is correct
16 Correct 11 ms 20692 KB Output is correct
17 Correct 11 ms 20692 KB Output is correct
18 Correct 11 ms 20692 KB Output is correct
19 Correct 11 ms 20656 KB Output is correct
20 Correct 13 ms 20648 KB Output is correct
21 Correct 11 ms 20692 KB Output is correct
22 Correct 11 ms 20692 KB Output is correct
23 Correct 11 ms 20632 KB Output is correct
24 Correct 14 ms 20692 KB Output is correct
25 Correct 12 ms 20692 KB Output is correct
26 Correct 11 ms 20692 KB Output is correct
27 Correct 10 ms 20692 KB Output is correct
28 Correct 13 ms 20652 KB Output is correct
29 Correct 11 ms 20692 KB Output is correct
30 Correct 400 ms 51892 KB Output is correct
31 Correct 555 ms 48848 KB Output is correct
32 Correct 484 ms 61436 KB Output is correct
33 Correct 427 ms 50528 KB Output is correct
34 Correct 471 ms 49600 KB Output is correct
35 Correct 484 ms 49520 KB Output is correct
36 Correct 412 ms 49448 KB Output is correct
37 Correct 493 ms 71324 KB Output is correct
38 Correct 582 ms 66132 KB Output is correct
39 Correct 512 ms 51756 KB Output is correct
40 Correct 773 ms 48844 KB Output is correct
41 Correct 370 ms 48532 KB Output is correct
42 Correct 538 ms 49084 KB Output is correct
43 Correct 537 ms 48632 KB Output is correct
44 Correct 510 ms 48796 KB Output is correct
45 Correct 690 ms 48748 KB Output is correct
46 Correct 13 ms 20692 KB Output is correct
47 Correct 11 ms 20636 KB Output is correct
48 Correct 13 ms 20644 KB Output is correct
49 Correct 12 ms 20724 KB Output is correct
50 Correct 13 ms 20736 KB Output is correct
51 Correct 15 ms 20684 KB Output is correct
52 Correct 519 ms 51636 KB Output is correct
53 Correct 841 ms 48704 KB Output is correct
54 Correct 515 ms 68612 KB Output is correct
55 Correct 594 ms 50284 KB Output is correct
56 Correct 636 ms 49764 KB Output is correct
57 Correct 843 ms 50196 KB Output is correct
58 Correct 566 ms 49424 KB Output is correct
59 Correct 613 ms 63800 KB Output is correct
60 Correct 679 ms 66100 KB Output is correct
61 Correct 518 ms 51932 KB Output is correct
62 Correct 927 ms 48492 KB Output is correct
63 Correct 14 ms 20736 KB Output is correct
64 Correct 16 ms 20736 KB Output is correct
65 Correct 16 ms 20660 KB Output is correct
66 Correct 14 ms 20736 KB Output is correct
67 Correct 12 ms 20692 KB Output is correct
68 Correct 11 ms 20692 KB Output is correct
69 Correct 11 ms 20740 KB Output is correct
70 Correct 14 ms 20692 KB Output is correct
71 Correct 11 ms 20692 KB Output is correct
72 Correct 11 ms 20692 KB Output is correct
73 Correct 11 ms 20692 KB Output is correct
74 Correct 12 ms 20692 KB Output is correct
75 Correct 13 ms 20680 KB Output is correct
76 Correct 11 ms 20720 KB Output is correct
77 Correct 12 ms 20728 KB Output is correct
78 Correct 16 ms 20692 KB Output is correct
79 Correct 683 ms 68092 KB Output is correct
80 Correct 3014 ms 61564 KB Output is correct
81 Correct 1319 ms 63092 KB Output is correct
82 Correct 2676 ms 48544 KB Output is correct
83 Correct 1847 ms 48152 KB Output is correct
84 Correct 1297 ms 48740 KB Output is correct
85 Correct 559 ms 47844 KB Output is correct
86 Correct 903 ms 61196 KB Output is correct
87 Correct 2750 ms 65404 KB Output is correct
88 Correct 1419 ms 49164 KB Output is correct
89 Execution timed out 4083 ms 48260 KB Time limit exceeded
90 Halted 0 ms 0 KB -