aboutsummaryrefslogtreecommitdiff
path: root/semestr-4/ask/lista13/186422.cpp
diff options
context:
space:
mode:
authorFranciszek Malinka <franciszek.malinka@gmail.com>2021-10-05 21:49:54 +0200
committerFranciszek Malinka <franciszek.malinka@gmail.com>2021-10-05 21:49:54 +0200
commitc5fcf7179a83ef65c86c6a4a390029149e518649 (patch)
treed29ffc5b86a0d257453cedcf87d91a13d8bf3b0d /semestr-4/ask/lista13/186422.cpp
parentf8a88b6a4aba1f66d04711a9330eaba49a50c463 (diff)
Duzy commit ze smieciami
Diffstat (limited to 'semestr-4/ask/lista13/186422.cpp')
-rw-r--r--semestr-4/ask/lista13/186422.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/semestr-4/ask/lista13/186422.cpp b/semestr-4/ask/lista13/186422.cpp
new file mode 100644
index 0000000..f3df2e1
--- /dev/null
+++ b/semestr-4/ask/lista13/186422.cpp
@@ -0,0 +1,47 @@
+#include <bits/stdc++.h>
+using namespace std;
+const int SIZE=101000;
+void imax(int &a, int b){
+ a=max(a, b);
+}
+void imin(int &a, int b){
+ a=min(a, b);
+}
+void lmax(long long &a, long long b){
+ a=max(a, b);
+}
+void lmin(long long &a, long long b){
+ a=min(a, b);
+}
+/*
+ WARNING: I'm using strange bracket style!
+*/
+vector <pair <int, int> > out;
+vector <int> v[SIZE], s;
+int n, q, x, y;
+int main()
+ {
+ ios::sync_with_stdio(0);
+ cin.tie(0);
+ cout.tie(0);
+ cin>>n>>q;
+ while (q--)
+ cin>>x>>y, v[min(x, y)].push_back(max(x, y));
+ v[1].push_back(n);
+ for (int i=1; i<=n; i++)
+ {
+ sort(v[i].begin(), v[i].end());
+ reverse(v[i].begin(), v[i].end());
+ while (!s.empty() && s.back()<=i)
+ s.pop_back();
+ if (!s.empty() && s.back()>i+1)
+ if (v[i].size()==0 || s.back()!=v[i][0])
+ out.push_back({s.back(), i});
+ for (auto j: v[i])
+ s.push_back(j);
+ }
+ cout<<out.size()<<"\n";
+ for (auto i: out)
+ cout<<i.first<<" "<<i.second<<"\n";
+ return 0;
+ }