Skip to content

Commit ca75b8b

Browse files
committed
Dodano rozwiązanie zadania 'Łańcuch kolorowy' z XX OI
1 parent ec4e20e commit ca75b8b

File tree

1 file changed

+53
-0
lines changed
  • rozwiazania/xx/etap3/dzien1/lan

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Rozwiązanie zadania 'Łańcuch kolorowy' z III etapu XX OI.
2+
// Autor: Paweł Putra
3+
// Złożoność czasowa: O(n + m)
4+
// Złożoność pamięciowa: O(n + m).
5+
// Punkty: 100 (upsolve)
6+
7+
#include <iostream>
8+
#define cerr if(false)cerr
9+
#define dbg(x) #x << " = " << x << " "
10+
using namespace std;
11+
constexpr int MAXN = 1'000'005;
12+
int l[MAXN], c[MAXN], a[MAXN], brakuje[MAXN];
13+
14+
int zle;
15+
void dodaj(int kolor, int delta) {
16+
if (brakuje[kolor] == 0) zle++;
17+
brakuje[kolor] += delta;
18+
if (brakuje[kolor] == 0) zle--;
19+
cerr << dbg(kolor) << " " << dbg(delta) << "-> " << dbg(brakuje[kolor]) << " " << dbg(zle) << endl;
20+
}
21+
22+
int32_t main() {
23+
ios_base::sync_with_stdio(0);
24+
int n, m;
25+
cin >> n >> m;
26+
27+
long long sum = 0;
28+
for (int i = 1; i <= m; i++) {
29+
cin >> l[i];
30+
sum += l[i];
31+
}
32+
33+
34+
for (int i = 1; i <= m; i++) {
35+
cin >> c[i];
36+
37+
dodaj(c[i], l[i]);
38+
}
39+
40+
int wynik = 0;
41+
for (int i = 1; i <= n; i++) {
42+
cerr << dbg(i) << endl;
43+
cin >> a[i];
44+
dodaj(a[i], -1);
45+
if (i > sum)
46+
dodaj(a[i-sum], 1);
47+
if (i >= sum)
48+
if (zle == 0) wynik++;
49+
}
50+
51+
cout << wynik << "\n";
52+
53+
}

0 commit comments

Comments
 (0)