Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ⠸⣷⣦⠤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣠⣤⠀⠀⠀
- ⠀⠙⣿⡄⠈⠑⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠔⠊⠉⣿⡿⠁⠀⠀⠀
- ⠀⠀⠈⠣⡀⠀⠀⠑⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠊⠁⠀⠀⣰⠟⠀⠀⠀⣀⣀
- ⠀⠀⠀⠀⠈⠢⣄⠀⡈⠒⠊⠉⠁⠀⠈⠉⠑⠚⠀⠀⣀⠔⢊⣠⠤⠒⠊⠉⡜
- ⠀⠀⠀⠀⠀⠀⠀⡽⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠩⡔⠊⠁⠀⠀⠀⠀⠀ ⠀⠇
- ⠀⠀⠀⠀⠀⠀⠀⡇⢠⡤⢄⠀⠀⠀⠀⠀⡠⢤⣄⠀⡇⠀⠀⠀⠀⠀⠀⠀ ⢰⠀
- ⠀⠀⠀⠀⠀⠀⢀⠇⠹⠿⠟⠀⠀⠤⠀⠀⠻⠿⠟⠀⣇⠀⠀⡀⠠⠄⠒⠊⠁⠀
- ⠀⠀⠀⠀⠀⠀⢸⣿⣿⡆⠀⠰⠤⠖⠦⠴⠀⢀⣶⣿⣿⠀⠙⢄⠀⠀⠀⠀⠀⠀
- ⠀⠀⠀⠀⠀⠀⠀⢻⣿⠃⠀⠀⠀⠀⠀⠀⠀⠈⠿⡿⠛⢄⠀⠀⠱⣄⠀⠀⠀⠀
- ⠀⠀⠀⠀⠀⠀⠀⢸⠈⠓⠦⠀⣀⣀⣀⠀⡠⠴⠊⠹⡞⣁⠤⠒⠉⠀⠀⠀⠀⠀
- ⠀⠀⠀⠀⠀⠀⣠⠃⠀⠀⠀⠀⡌⠉⠉⡤⠀⠀⠀⠀⢻⠿⠆⠀⠀⠀⠀⠀⠀⠀
- ⠀⠀⠀⠀⠀⠰⠁⡀⠀⠀⠀⠀⢸⠀⢰⠃⠀⠀⠀⢠⠀⢣⠀⠀⠀⠀⠀⠀⠀⠀
- ⠀⠀⠀⢶⣗⠧⡀⢳⠀⠀⠀⠀⢸⣀⣸⠀⠀⠀⢀⡜⠀⣸⢤⣶⠀⠀⠀⠀⠀⠀
- ⠀⠀⠀⠈⠻⣿⣦⣈⣧⡀⠀⠀⢸⣿⣿⠀⠀⢀⣼⡀⣨⣿⡿⠁⠀⠀⠀⠀⠀⠀
- ⠀⠀⠀⠀⠀⠈⠻⠿⠿⠓⠄⠤⠘⠉⠙⠤⢀⠾⠿⣿⠟⠋
- */
- #include <iostream>
- #include <string>
- #include <sstream>
- #include <vector>
- #include <cmath>
- #include <algorithm>
- #include <memory.h>
- #include <stdio.h>
- #include <stack>
- #include <deque>
- #include <queue>
- #include <set>
- #include <iterator>
- #include <map>
- #include <iomanip>
- #include <unordered_set>
- using namespace std;
- const unsigned int R = 1 << 15, INF = 4294967294;
- //unsigned int MOD = 4294967296;
- unsigned int tree[2 * R + 5];
- inline void build()
- {
- for (int i = R - 1; i > 0; i--)
- {
- tree[i] = min(tree[i * 2], tree[i * 2 + 1]);
- }
- return;
- }
- inline unsigned int minn(unsigned int ql, unsigned int qr, unsigned int v, unsigned int nl, unsigned int nr)
- {
- if (nl > qr || nr < ql)
- {
- return INF;
- }
- if (nl >= ql && nr <= qr)
- {
- return tree[v];
- }
- unsigned int nm = (nl + nr) / 2;
- unsigned int lol = minn(ql, qr, 2 * v, nl, nm);
- unsigned int kek = INF;
- if (tree[v * 2 + 1] < lol || lol == INF)
- {
- kek = minn(ql, qr, 2 * v + 1, nm + 1, nr);
- }
- return min(lol, kek);
- }
- signed main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- unsigned int n, m, a, b;
- while (true)
- {
- cin >> n >> m >> a >> b;
- if (n == m && m == a && a == b && b == 0)
- {
- return 0;
- }
- for (unsigned int i = 0; i < n; i++)
- {
- tree[i + R] = (a * (i + 1) + b);
- }
- for (unsigned int i = n; i <= R; i++)
- {
- tree[i + R] = INF;
- }
- build();
- unsigned long long ans = 0;
- for (unsigned int i = n + 1; i < n + 2 * m; i += 2)
- {
- unsigned int l = (a * i + b);
- unsigned int r = (a * (i + 1) + b);
- l %= n;
- r %= n;
- l++;
- r++;
- ans += minn(min(l, r), max(l, r), 1, 1, R);
- }
- cout << ans << "\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement