fork download
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <bits/stdc++.h>
  3. #include <iomanip>
  4. using namespace std;
  5.  
  6. #define ll long long
  7. #define ld long double
  8. const ll MAXN = 1e6 + 5;
  9. const ll moD = 1e9 + 7;
  10.  
  11. ll spf[MAXN];
  12.  
  13. ll power(ll base, ll exp, ll mod)
  14. {
  15. if (exp == 0)
  16. return 1 % mod;
  17.  
  18. ll half = power(base, exp / 2, mod);
  19. ll ans = (half * half) % mod;
  20.  
  21. if (exp % 2 == 1)
  22. ans = (ans * base) % mod;
  23.  
  24. return ans;
  25. }
  26.  
  27. ll gcd(ll a, ll b)
  28. {
  29. if (b == 0)
  30. return a;
  31. return gcd(b, a % b);
  32. }
  33.  
  34. ll lcm(ll a, ll b)
  35. {
  36. return a / gcd(a, b) * b;
  37. }
  38.  
  39. void sieve()
  40. {
  41. for (int i = 1; i < MAXN; i++)
  42. spf[i] = i;
  43.  
  44. for (int p = 2; p * p < MAXN; p++)
  45. {
  46. if (spf[p] == p)
  47. {
  48. for (int i = p * p; i < MAXN; i += p)
  49. {
  50. if (spf[i] == i)
  51. spf[i] = p;
  52. }
  53. }
  54. }
  55. }
  56.  
  57. vector<pair<ll, ll>> primeFactorization(ll x)
  58. {
  59. vector<pair<ll, ll>> factors;
  60. while (x > 1)
  61. {
  62. ll prime = spf[x];
  63. ll count = 0;
  64.  
  65. while (x % prime == 0)
  66. {
  67. count++;
  68. x /= prime;
  69. }
  70. factors.emplace_back(prime, count);
  71. }
  72. return factors;
  73. }
  74.  
  75. void generateDivisors(const vector<pair<ll, ll>> &factors, vector<ll> &divisors, ll current = 1, int index = 0)
  76. {
  77. if (index == factors.size())
  78. {
  79. divisors.push_back(current);
  80. return;
  81. }
  82. ll prime = factors[index].first;
  83. ll exp = factors[index].second;
  84.  
  85. for (int i = 0; i <= exp; i++)
  86. {
  87. generateDivisors(factors, divisors, current, index + 1);
  88. current *= prime;
  89. }
  90. }
  91.  
  92. vector<ll> prefixSum(vector<ll> &v)
  93. {
  94. vector<ll> vc(v.size());
  95. vc[0] = v[0];
  96. for (int i = 1; i < v.size(); i++)
  97. {
  98. vc[i] = vc[i - 1] + v[i];
  99. }
  100.  
  101. return vc;
  102. }
  103.  
  104. ld Gamma(ld n)
  105. {
  106. return tgammal(n);
  107. }
  108.  
  109. ld average(vector<ld> &vector)
  110. {
  111. if (vector.empty())
  112. {
  113. return 0.0;
  114. }
  115. ld sum = 0.0;
  116. for (ld e : vector)
  117. {
  118. sum += e;
  119. }
  120. return static_cast<ld>(sum) / vector.size();
  121. }
  122.  
  123. ll binarySearch(vector<ll> &v, ll target)
  124. {
  125. ll l = 0, r = v.size() - 1;
  126. while (l <= r)
  127. {
  128. ll m = l + (r - l) / 2;
  129. if (v[m] == target)
  130. {
  131. return m;
  132. }
  133. else if (v[m] < target)
  134. l = m + 1;
  135. else
  136. r = m - 1;
  137. }
  138. return -1;
  139. }
  140. int main()
  141. {
  142. ios::sync_with_stdio(false);
  143. cin.tie(nullptr);
  144.  
  145. // freopen("mex.in", "r", stdin);
  146.  
  147. ll n;
  148. cin >> n;
  149.  
  150. vector<pair<ll, ll>> intervals(n);
  151.  
  152. for (int i = 0; i < n; i++)
  153. {
  154. cin >> intervals[i].first >> intervals[i].second;
  155. }
  156. sort(intervals.begin(), intervals.end());
  157.  
  158. long long current_min = intervals[0].first;
  159.  
  160. for (int i = 0; i < n - 1; i++)
  161. {
  162. long long curL = intervals[i].first;
  163. long long curR = intervals[i].second;
  164. long long nextL = intervals[i + 1].first;
  165.  
  166. if (curR + 1 < nextL)
  167. {
  168. cout << current_min << " " << curR << "\n";
  169. current_min = nextL;
  170. }
  171. }
  172.  
  173. cout << current_min << " " << intervals.back().second << "\n";
  174.  
  175. return 0;
  176. }
Success #stdin #stdout 0.2s 68968KB
stdin
Standard input is empty
stdout
0 0