diff --git a/CSES - CSES Problem Set/Playlist.cpp b/CSES - CSES Problem Set/Playlist.cpp new file mode 100644 index 0000000..a0862c0 --- /dev/null +++ b/CSES - CSES Problem Set/Playlist.cpp @@ -0,0 +1,28 @@ +// +// Created by darian on 07.06.24. +// + +#include +using namespace std; +using ll = long long; + +int main() { + int n; cin >> n; + vector in(n); + for (auto &e : in) cin >> e; + int lo = 0; + int hi = 0; + int max_count = 1; + set current = {in[0]}; + + while (hi < n - 1) { + hi++; + while (current.count(in[hi])) { + current.erase(in[lo]); + lo++; + } + current.insert(in[hi]); + max_count = max(max_count, (int)current.size()); + } + cout << max_count << endl; +} \ No newline at end of file diff --git a/CSES - CSES Problem Set/Towers.cpp b/CSES - CSES Problem Set/Towers.cpp new file mode 100644 index 0000000..908c353 --- /dev/null +++ b/CSES - CSES Problem Set/Towers.cpp @@ -0,0 +1,26 @@ +// +// Created by darian on 07.06.24. +// + +#include +using namespace std; +using ll = long long; + +int main() { + int n; cin >> n; + vector towers; + for (int i{}; i < n; i++) { + ll a; cin >> a; + auto it = std::lower_bound(towers.begin(), towers.end(), a+1); + if (it == towers.begin()) { + if (towers.size()) towers[0] = a; + else towers.insert(towers.begin(), a); + } else if (it == towers.end()) { + towers.push_back(a); + } else { + towers[it - towers.begin()] = a; + } + } + + cout << towers.size() << endl; +} \ No newline at end of file diff --git a/CSES - CSES Problem Set/Traffic_Lights.cpp b/CSES - CSES Problem Set/Traffic_Lights.cpp new file mode 100644 index 0000000..bba7b35 --- /dev/null +++ b/CSES - CSES Problem Set/Traffic_Lights.cpp @@ -0,0 +1,30 @@ +// +// Created by darian on 07.06.24. +// + +#include +using namespace std; +using ll = long long; + +int main() { + ll x; cin >> x; + int n; cin >> n; + map distances; + distances[x] = 1; + set> lines = {{0, x}}; + + for (int i{}; i < n; i++) { + ll t; cin >> t; + auto it = lines.lower_bound({t, t}); + --it; + auto p = *it; + lines.erase(p); + lines.insert({p.first, t}); + lines.insert({t, p.second}); + if (distances[p.second - p.first] == 1) distances.erase(p.second - p.first); + distances[t - p.first]++; + distances[p.second - t]++; + cout << (*distances.rbegin()).first << endl; + } + +} \ No newline at end of file