147842025-02-02 15:55:35sarminLeghosszabb béke (75 pont)cpp17Hibás válasz 72/7557ms10412 KiB
// Created by Armin on 2/1/2025.

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pp = pair<int, int>;

const int k = 18;

int sum(vector<vector<int>>& st, int l, int r) {
  int res = 0;
  for (int i = k; i >= 0; i--) {
    if ((1 << i) <= r - l + 1) {
      res += st[i][l];
      l += (1 << i);
    }
  }
  return res;
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(0);
    
    int n, m; cin >> n >> m;
    vector<pair<int, int>> v(m);
    vector<int> prefix(n + 2);
    vector<int> start, end;
    for (int i = 0; i < m; i++) {
      cin >> v[i].first >> v[i].second;
      v[i].second++;
      prefix[v[i].first]++;
      prefix[v[i].second]--;
      start.push_back(v[i].first);
      end.push_back(v[i].second);
    }
    start.push_back(n + 1);
    end.push_back(1);
    sort(start.begin(), start.end());
    sort(end.begin(), end.end());
    start.erase(unique(start.begin(), start.end()), start.end());
    end.erase(unique(end.begin(), end.end()), end.end());

    n = n + 2;
    vector<vector<int>> st(k + 1, vector<int>(n + 1));
    for (int i = 1; i < n; i++) {
      prefix[i] += prefix[i - 1];
      st[0][i] = prefix[i];
    }

    for (int i = 1; i <= k; i++) {
      for (int j = 1; j <= n - (1 << (i - 1)); j++) {
        st[i][j] = st[i - 1][j] + st[i - 1][j + (1 << (i - 1))];
      }
    }


    int i = 0, j = 0;
    int mx = -1, mxs = 0;
    while (i < start.size() && j < end.size()) {
      while (start[i] <= end[j] && i + 1 < start.size()) {
        i++;
      }

      int d = sum(st, end[j], start[i] - 1);
      if (d == 0 && start[i] - end[j] > mx) {
        mx = start[i] - end[j];
        mxs = end[j];
      }
      j++;
    }
    if (mx != -1) {
      cout << mx << " " << mxs;
    } else {
      cout << "-1";
    }

    /*vector<pair<int, int>> v(m);
    vector<int> lr(4 * m);
    for (int i = 0; i < m; i++) {
      cin >> v[i].first >> v[i].second;
      v[i].second++;
      lr[4 * i] = v[i].first;
      lr[4 * i + 1] = max(0, v[i].first - 1);
      lr[4 * i + 2] = v[i].second;
      lr[4 * i + 3] = v[i].second + 1;
    }
    sort(lr.begin(), lr.end());
    lr.erase(unique(lr.begin(), lr.end()), lr.end());
    for (int x : lr) cout << x << " ";
    cout << endl;

    int k = lr.size();
    vector<int> a(k);
    for (auto& [l, r] : v) {
      l = lower_bound(lr.begin(), lr.end(), l) - lr.begin();
      r = lower_bound(lr.begin(), lr.end(), r) - lr.begin();
      a[l]++;
      a[r]--;
    }

    for (int i = 1; i < k; i++) {
      a[i] = a[i] + a[i - 1];
    }
    for (int x : a) cout << x << " ";*/

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base72/75
1Elfogadva0/01ms508 KiB
2Elfogadva0/057ms10412 KiB
3Hibás válasz0/31ms316 KiB
4Elfogadva3/31ms316 KiB
5Elfogadva3/31ms500 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva4/41ms316 KiB
9Elfogadva4/42ms908 KiB
10Elfogadva4/42ms1076 KiB
11Elfogadva4/44ms1096 KiB
12Elfogadva4/46ms1924 KiB
13Elfogadva4/44ms1864 KiB
14Elfogadva4/44ms1868 KiB
15Elfogadva4/46ms1860 KiB
16Elfogadva4/47ms3036 KiB
17Elfogadva4/48ms3892 KiB
18Elfogadva4/48ms4672 KiB
19Elfogadva4/450ms10148 KiB
20Elfogadva4/448ms10228 KiB
21Elfogadva4/441ms10152 KiB
22Elfogadva4/450ms10152 KiB