aboutsummaryrefslogtreecommitdiff
path: root/11_sliding_window_problems
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2026-07-06 19:08:08 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2026-07-06 19:08:08 +0200
commit96254947699986c59f0dc63d69fd4b76bd3ed43e (patch)
tree6c4dca945d7f7427c48be234d827fe4d33be02c5 /11_sliding_window_problems
downloadcses-96254947699986c59f0dc63d69fd4b76bd3ed43e.tar.gz
cses-96254947699986c59f0dc63d69fd4b76bd3ed43e.zip
Initial commit
Diffstat (limited to '')
-rwxr-xr-x11_sliding_window_problems/a.outbin0 -> 65568 bytes
-rw-r--r--11_sliding_window_problems/sliding_window_minimum_3221.cpp29
-rw-r--r--11_sliding_window_problems/sliding_window_or_3405.cpp28
-rw-r--r--11_sliding_window_problems/sliding_window_sum_3220.cpp25
-rw-r--r--11_sliding_window_problems/sliding_window_xor_3426.cpp26
5 files changed, 108 insertions, 0 deletions
diff --git a/11_sliding_window_problems/a.out b/11_sliding_window_problems/a.out
new file mode 100755
index 0000000..8a06b5a
--- /dev/null
+++ b/11_sliding_window_problems/a.out
Binary files differ
diff --git a/11_sliding_window_problems/sliding_window_minimum_3221.cpp b/11_sliding_window_problems/sliding_window_minimum_3221.cpp
new file mode 100644
index 0000000..ef7485a
--- /dev/null
+++ b/11_sliding_window_problems/sliding_window_minimum_3221.cpp
@@ -0,0 +1,29 @@
1#include <algorithm>
2#include <deque>
3#include <iostream>
4#include <vector>
5
6int main() {
7 long long n, k, x, a, b, c;
8 std::cin >> n >> k >> x >> a >> b >> c;
9
10 std::vector<long long> v(k);
11 std::deque<long long> q;
12 for (long long i = 0; i < k; i++) {
13 v[i] = x;
14 while (!q.empty() && q.back() >= x) q.pop_back();
15 q.push_back(x);
16 x = (a*x + b) % c;
17 }
18
19 long long sol = q.front();
20 for (long long i = 0; i < n-k; i++) {
21 if (q.front() == v[i%k]) q.pop_front();
22 v[i%k] = (a*v[(i-1+k)%k] + b) % c;
23 while (!q.empty() && q.back() >= v[i%k]) q.pop_back();
24 q.push_back(v[i%k]);
25 sol ^= q.front();
26 }
27
28 std::cout << sol << "\n";
29}
diff --git a/11_sliding_window_problems/sliding_window_or_3405.cpp b/11_sliding_window_problems/sliding_window_or_3405.cpp
new file mode 100644
index 0000000..ba95e22
--- /dev/null
+++ b/11_sliding_window_problems/sliding_window_or_3405.cpp
@@ -0,0 +1,28 @@
1#include <iostream>
2#include <vector>
3
4// We pre-compute prefix and suffix or for non-overlapping windows of k
5// elements, and we compute the sliding window or from those.
6// https://codeforces.com/blog/entry/142846
7
8int main() {
9 size_t n, k;
10 long long a, b, c, sol{0};
11 std::cin >> n >> k;
12 std::vector<long long> v(n), pre(n), suf(n);
13 std::cin >> v[0] >> a >> b >> c;
14
15 for (size_t i = 1; i < n; i++)
16 v[i] = (a*v[i-1] + b) % c;
17
18 for (size_t i = 0; i < n; i++)
19 pre[i] = i % k == 0 ? v[i] : v[i] | pre[i-1];
20
21 for (size_t i = n; i > 0; i--)
22 suf[i-1] = i == n || (i-1) % k == 0 ? v[i-1] : v[i-1] | suf[i];
23
24 for (long long i = k-1; i < n; i++)
25 sol ^= pre[i] | suf[i-(k-1)];
26
27 std::cout << sol << "\n";
28}
diff --git a/11_sliding_window_problems/sliding_window_sum_3220.cpp b/11_sliding_window_problems/sliding_window_sum_3220.cpp
new file mode 100644
index 0000000..9096b75
--- /dev/null
+++ b/11_sliding_window_problems/sliding_window_sum_3220.cpp
@@ -0,0 +1,25 @@
1#include <iostream>
2#include <vector>
3
4int main() {
5 size_t n, k;
6 long long x, a, b, c, sum{0}, sol{0};
7 std::cin >> n >> k >> x >> a >> b >> c;
8
9 std::vector<long long> v(k);
10 for (size_t i = 0; i < k; i++) {
11 sum += x;
12 v[i] = x;
13 x = (a*x + b) % c;
14 }
15
16 sol = sum;
17 for (size_t i = 0; i < n-k; i++) {
18 sum -= v[i%k];
19 v[i%k] = (a*v[(i-1+k)%k] + b) % c;
20 sum += v[i%k];
21 sol ^= sum;
22 }
23
24 std::cout << sol << "\n";
25}
diff --git a/11_sliding_window_problems/sliding_window_xor_3426.cpp b/11_sliding_window_problems/sliding_window_xor_3426.cpp
new file mode 100644
index 0000000..0f21ce3
--- /dev/null
+++ b/11_sliding_window_problems/sliding_window_xor_3426.cpp
@@ -0,0 +1,26 @@
1#include <algorithm>
2#include <deque>
3#include <iostream>
4#include <vector>
5
6int main() {
7 long long n, k, x, a, b, c, m{0};
8 std::cin >> n >> k >> x >> a >> b >> c;
9
10 std::vector<long long> v(k);
11 for (long long i = 0; i < k; i++) {
12 v[i] = x;
13 m ^= x;
14 x = (a*x + b) % c;
15 }
16
17 long long sol{m};
18 for (long long i = 0; i < n-k; i++) {
19 m ^= v[i%k];
20 v[i%k] = (a*v[(i-1+k)%k] + b) % c;
21 m ^= v[i%k];
22 sol ^= m;
23 }
24
25 std::cout << sol << "\n";
26}

Generated with cgit - Back to sebastiano.tronto.net