File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed
rozwiazania/xx/etap3/dzien1/lan Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments