diff --git a/cses/range-queries/prefix-sum-queries.cc b/cses/range-queries/prefix-sum-queries.cc new file mode 100644 index 0000000..e07ca70 --- /dev/null +++ b/cses/range-queries/prefix-sum-queries.cc @@ -0,0 +1,104 @@ +#include // {{{ + +// https://codeforces.com/blog/entry/96344 + +#pragma GCC optimize("O2,unroll-loops") +#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") + +using namespace std; + +template +[[nodiscard]] static T MIN() { + return std::numeric_limits::min(); +} + +template +[[nodiscard]] static T MAX() { + return std::numeric_limits::max(); +} + +template +[[nodiscard]] static T sc(auto&& x) { + return static_cast(x); +} + +template +[[nodiscard]] static T sz(auto&& x) { + return static_cast(x.size()); +} + +#define prln(...) std::println(__VA_ARGS__) +#define pr(...) std::print(__VA_ARGS__) + +#ifdef LOCAL +#define dbgln(...) std::println(__VA_ARGS__) +#define dbg(...) std::print(__VA_ARGS__) +#endif + +using ll = long long; +using ld = long double; +template +using v = std::vector; +template +using r = std::array; +template +using p = std::pair; + +#define ff first +#define ss second +#define eb emplace_back +#define pb push_back +#define all(x) (x).begin(), (x).end() +#define rall(x) (x).rbegin(), (x).rend() +// }}} + +void solve() { + int n, q; + cin >> n >> q; + v a(n); + for (auto& e : a) { + cin >> e; + } + + /* + max prefix sum in range: segtree max() + +update: prefixes @ and after change + +have various prefix sums, and various deltas + +[p1, p2, p3, p4, p5, p6] +[0, 1, -1, 2, -5, 3] + +construct segtree: RMaxQ +update: everything after [a,] += delta + */ + + while (q--) { + char cmd; + cin >> cmd; + int u, l, r; + ll u; + if (cmd == '1') { + cin >> i >> u; + } else { + cin >> l >> r; + --l; + --r; + } + } +} + +int main() { // {{{ + cin.tie(nullptr)->sync_with_stdio(false); + cin.exceptions(cin.failbit); + + int t = 1; + // cin >> t; + while (t--) { + solve(); + } + + return 0; +} +// }}} diff --git a/cses/range-queries/prefix-sum-queries.in b/cses/range-queries/prefix-sum-queries.in new file mode 100644 index 0000000..581b093 --- /dev/null +++ b/cses/range-queries/prefix-sum-queries.in @@ -0,0 +1,6 @@ +8 4 +1 2 -1 3 1 -5 1 4 +2 2 6 +1 4 -2 +2 2 6 +2 3 4 diff --git a/cses/range-queries/prefix-sum-queries.out b/cses/range-queries/prefix-sum-queries.out new file mode 100644 index 0000000..e69de29 diff --git a/cses/sorting-and-searching/playlist.cc b/cses/sorting-and-searching/playlist.cc new file mode 100644 index 0000000..ea7a688 --- /dev/null +++ b/cses/sorting-and-searching/playlist.cc @@ -0,0 +1,100 @@ +#include // {{{ + +// https://codeforces.com/blog/entry/96344 + +#pragma GCC optimize("O2,unroll-loops") +#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") + +using namespace std; + +template +[[nodiscard]] static T MIN() { + return std::numeric_limits::min(); +} + +template +[[nodiscard]] static T MAX() { + return std::numeric_limits::max(); +} + +template +[[nodiscard]] static T sc(auto&& x) { + return static_cast(x); +} + +template +[[nodiscard]] static T sz(auto&& x) { + return static_cast(x.size()); +} + +#define prln(...) std::println(__VA_ARGS__) +#define pr(...) std::print(__VA_ARGS__) + +#ifdef LOCAL +#define dbgln(...) std::println(__VA_ARGS__) +#define dbg(...) std::print(__VA_ARGS__) +#endif + +using ll = long long; +using ld = long double; +template +using ve = std::vector; +template +using ar = std::array; +template +using pa = std::pair; +template +using tu = std::tuple; +template +using dq = std::deque; +template +using qu = std::queue; +template +using pq = std::priority_queue; +template +using st = std::stack; + +#define ff first +#define ss second +#define eb emplace_back +#define pb push_back +#define all(x) (x).begin(), (x).end() +#define rall(x) (x).rbegin(), (x).rend() +// }}} + +void solve() { + int n; + cin >> n; + set seen; + + int ans = 0; + ve a(n); + for (auto& e : a) + cin >> e; + + int l = 0; + for (int r = 0; r < n; ++r) { + while (seen.contains(a[r])) { + seen.erase(a[l]); + ++l; + } + seen.insert(a[r]); + ans = max(ans, sz(seen)); + } + + cout << ans << endl; +} + +int main() { // {{{ + cin.tie(nullptr)->sync_with_stdio(false); + cin.exceptions(cin.failbit); + + int t = 1; + // cin >> t; + while (t--) { + solve(); + } + + return 0; +} +// }}} diff --git a/cses/sorting-and-searching/playlist.in b/cses/sorting-and-searching/playlist.in new file mode 100644 index 0000000..ee9c8cb --- /dev/null +++ b/cses/sorting-and-searching/playlist.in @@ -0,0 +1,2 @@ +8 +1 2 1 3 2 7 4 2 diff --git a/cses/sorting-and-searching/playlist.out b/cses/sorting-and-searching/playlist.out new file mode 100644 index 0000000..eaa39e8 --- /dev/null +++ b/cses/sorting-and-searching/playlist.out @@ -0,0 +1,4 @@ +5 + +[code]: 0 +[time]: 13.3076 ms \ No newline at end of file diff --git a/cses/sorting-and-searching/towers.cc b/cses/sorting-and-searching/towers.cc new file mode 100644 index 0000000..a9b4a6e --- /dev/null +++ b/cses/sorting-and-searching/towers.cc @@ -0,0 +1,125 @@ +#include // {{{ + +// https://codeforces.com/blog/entry/96344 + +#pragma GCC optimize("O2,unroll-loops") +#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") + +using namespace std; + +template +[[nodiscard]] static T MIN() { + return std::numeric_limits::min(); +} + +template +[[nodiscard]] static T MAX() { + return std::numeric_limits::max(); +} + +template +[[nodiscard]] static T sc(auto&& x) { + return static_cast(x); +} + +template +[[nodiscard]] static T sz(auto&& x) { + return static_cast(x.size()); +} + +#define prln(...) std::println(__VA_ARGS__) +#define pr(...) std::print(__VA_ARGS__) + +#ifdef LOCAL +#define dbgln(...) std::println(__VA_ARGS__) +#define dbg(...) std::print(__VA_ARGS__) +#endif + +using ll = long long; +using ld = long double; +template +using ve = std::vector; +template +using ar = std::array; +template +using pa = std::pair; +template +using tu = std::tuple; +template +using dq = std::deque; +template +using qu = std::queue; +template +using pq = std::priority_queue; +template +using st = std::stack; + +#define ff first +#define ss second +#define eb emplace_back +#define pb push_back +#define all(x) (x).begin(), (x).end() +#define rall(x) (x).rbegin(), (x).rend() +// }}} + +void solve() { + int n; + cin >> n; + ve cubes(n); + for (auto& e : cubes) + cin >> e; + + multiset towers; + /* + tower only on smaller, minimize total + <- stack highest possible + + a[i] >= a[i + 1] >= ... + + x > y + x + y + + stack blocks on the smallest accomodating block + + aka, for each cube, upper_bound it, and stack; if nothing, then add new + tower + + 3,2,1 8,5 +NOTE: forgot that must be strictly greater + +10 4 5 9 4 10 2 7 4 6 + +NOTE: didn't use multiset, + erasewd at *it instead of it +NOTE: didn't think explicitly about above example + +if 10 and need to add 4, doing 10 4 vs 10,4 is the same +because alarger number can either next be: + +10,4 9 or 10,9 4 (NO DIFFFERENCE) + */ + + for (auto cube : cubes) { + auto it = towers.upper_bound(cube); + if (it != towers.end()) { + towers.erase(it); + } + towers.insert(cube); + } + + cout << towers.size() << endl; +} + +int main() { // {{{ + cin.tie(nullptr)->sync_with_stdio(false); + cin.exceptions(cin.failbit); + + int t = 1; + // cin >> t; + while (t--) { + solve(); + } + + return 0; +} +// }}} diff --git a/cses/sorting-and-searching/towers.in b/cses/sorting-and-searching/towers.in new file mode 100644 index 0000000..58b8349 --- /dev/null +++ b/cses/sorting-and-searching/towers.in @@ -0,0 +1,2 @@ +10 +10 4 5 9 4 10 2 7 4 6 diff --git a/cses/sorting-and-searching/towers.out b/cses/sorting-and-searching/towers.out new file mode 100644 index 0000000..1487e18 --- /dev/null +++ b/cses/sorting-and-searching/towers.out @@ -0,0 +1,20 @@ +inserting 10 +removing 10 +inserting 4 +inserting 5 +inserting 9 +removing 5 +inserting 4 +inserting 10 +removing 4 +inserting 2 +removing 9 +inserting 7 +removing 7 +inserting 4 +removing 10 +inserting 6 +4 + +[code]: 0 +[time]: 12.9681 ms \ No newline at end of file diff --git a/cses/sorting-and-searching/traffic-lights.cc b/cses/sorting-and-searching/traffic-lights.cc new file mode 100644 index 0000000..35b746d --- /dev/null +++ b/cses/sorting-and-searching/traffic-lights.cc @@ -0,0 +1,139 @@ +#include // {{{ + +// https://codeforces.com/blog/entry/96344 + +#pragma GCC optimize("O2,unroll-loops") +#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") + +using namespace std; + +template +[[nodiscard]] static T MIN() { + return std::numeric_limits::min(); +} + +template +[[nodiscard]] static T MAX() { + return std::numeric_limits::max(); +} + +template +[[nodiscard]] static T sc(auto&& x) { + return static_cast(x); +} + +template +[[nodiscard]] static T sz(auto&& x) { + return static_cast(x.size()); +} + +#define prln(...) std::println(__VA_ARGS__) +#define pr(...) std::print(__VA_ARGS__) + +#ifdef LOCAL +#define dbgln(...) std::println(__VA_ARGS__) +#define dbg(...) std::print(__VA_ARGS__) +#endif + +using ll = long long; +using ld = long double; +template +using ve = std::vector; +template +using ar = std::array; +template +using pa = std::pair; +template +using tu = std::tuple; +template +using dq = std::deque; +template +using qu = std::queue; +template +using pq = std::priority_queue; +template +using st = std::stack; + +#define ff first +#define ss second +#define eb emplace_back +#define pb push_back +#define all(x) (x).begin(), (x).end() +#define rall(x) (x).rbegin(), (x).rend() +// }}} + +// NOTE: i'm getting to the point where more complex dsa +// indeed may be needed +// I faded out like "no, no way i need two DSA", even though +// a) that would def work, might as well + +// NOTE: do not know the apis + +void solve() { + int n, q; + cin >> n >> q; + + ve lights(q); + set pts{0, n}; + for (auto& e : lights) { + cin >> e; + pts.insert(e); + } + + // NOTE: this was horrible + int maximum = 0; + int last = 0; + for (int x : pts) { + maximum = max(maximum, x - last); + last = x; + } + + ve ans(q, 0); + ans[q - 1] = maximum; + for (int i = q - 1; i > 0; --i) { + pts.erase(lights[i]); + auto it = pts.upper_bound(lights[i]); + int high = *it; + int low = *(--it); + maximum = max(maximum, high - low); + ans[i - 1] = maximum; + } + + for (int i = 0; i < q - 1; ++i) + cout << ans[i] << ' '; + cout << ans[q - 1]; + + // set lights{0, n}; + // multiset segments{n}; + // int light; + // while (q--) { + // cin >> light; + // + // auto upper = lights.upper_bound(light); + // auto lower = upper; + // --lower; + // + // segments.erase(segments.find(*upper - *lower)); + // + // segments.insert(*upper - light); + // segments.insert(light - *lower); + // + // lights.insert(light); + // + // cout << *segments.rbegin() << endl; + // } +} + +int main() { // {{{ + cin.tie(nullptr)->sync_with_stdio(false); + cin.exceptions(cin.failbit); + + int t = 1; + // cin >> t; + while (t--) { + solve(); + } + + return 0; +} +// }}} diff --git a/cses/sorting-and-searching/traffic-lights.in b/cses/sorting-and-searching/traffic-lights.in new file mode 100644 index 0000000..4886cd0 --- /dev/null +++ b/cses/sorting-and-searching/traffic-lights.in @@ -0,0 +1,2 @@ +8 3 +3 6 2 diff --git a/cses/sorting-and-searching/traffic-lights.out b/cses/sorting-and-searching/traffic-lights.out new file mode 100644 index 0000000..19f1433 --- /dev/null +++ b/cses/sorting-and-searching/traffic-lights.out @@ -0,0 +1,3 @@ +5 3 3 +[code]: 0 +[time]: 13.459 ms \ No newline at end of file