#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
/**
* Logic Function: O(N) using Difference Array
*/
int findMaxPeople(int n, const vector<pair<int, int>>& requirements) {
// Size n + 1 allows index n to be accessed safely
vector<int> diff(n + 1, 0);
for (int i = 0; i < n; ++i) {
int start = requirements[i].first + 1;
int end = requirements[i].second + 1;
if (start <= n) {
diff[start]++;
if (end + 1 <= n) {
diff[end + 1]--;
}
}
}
int max_people = 0;
int current_willing = 0;
for (int i = 1; i <= n; ++i) {
current_willing += diff[i];
// If 'current_willing' people are okay with group size 'i'
if (current_willing >= i) {
max_people = i;
}
}
return max_people;
}
int main() {
// Example Input:
// 6 people
// 1 2 -> Range [2, 3]
// 1 4 -> Range [2, 5]
// 0 3 -> Range [1, 4]
// 0 1 -> Range [1, 2]
// 3 4 -> Range [4, 5]
// 0 2 -> Range [1, 3]
int n = 6;
vector<pair<int, int>> requirements = {
{1, 2}, {1, 4}, {0, 3}, {0, 1}, {3, 4}, {0, 2}
};
int result = findMaxPeople(n, requirements);
cout << "Maximum group size: " << result << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8qKgogKiBMb2dpYyBGdW5jdGlvbjogTyhOKSB1c2luZyBEaWZmZXJlbmNlIEFycmF5CiAqLwppbnQgZmluZE1heFBlb3BsZShpbnQgbiwgY29uc3QgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiYgcmVxdWlyZW1lbnRzKSB7CiAgICAvLyBTaXplIG4gKyAxIGFsbG93cyBpbmRleCBuIHRvIGJlIGFjY2Vzc2VkIHNhZmVseQogICAgdmVjdG9yPGludD4gZGlmZihuICsgMSwgMCk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBpbnQgc3RhcnQgPSByZXF1aXJlbWVudHNbaV0uZmlyc3QgKyAxOwogICAgICAgIGludCBlbmQgPSByZXF1aXJlbWVudHNbaV0uc2Vjb25kICsgMTsKCiAgICAgICAgaWYgKHN0YXJ0IDw9IG4pIHsKICAgICAgICAgICAgZGlmZltzdGFydF0rKzsKICAgICAgICAgICAgaWYgKGVuZCArIDEgPD0gbikgewogICAgICAgICAgICAgICAgZGlmZltlbmQgKyAxXS0tOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGludCBtYXhfcGVvcGxlID0gMDsKICAgIGludCBjdXJyZW50X3dpbGxpbmcgPSAwOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgIGN1cnJlbnRfd2lsbGluZyArPSBkaWZmW2ldOwogICAgICAgIC8vIElmICdjdXJyZW50X3dpbGxpbmcnIHBlb3BsZSBhcmUgb2theSB3aXRoIGdyb3VwIHNpemUgJ2knCiAgICAgICAgaWYgKGN1cnJlbnRfd2lsbGluZyA+PSBpKSB7CiAgICAgICAgICAgIG1heF9wZW9wbGUgPSBpOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbWF4X3Blb3BsZTsKfQoKaW50IG1haW4oKSB7CiAgICAvLyBFeGFtcGxlIElucHV0OgogICAgLy8gNiBwZW9wbGUKICAgIC8vIDEgMiAtPiBSYW5nZSBbMiwgM10KICAgIC8vIDEgNCAtPiBSYW5nZSBbMiwgNV0KICAgIC8vIDAgMyAtPiBSYW5nZSBbMSwgNF0KICAgIC8vIDAgMSAtPiBSYW5nZSBbMSwgMl0KICAgIC8vIDMgNCAtPiBSYW5nZSBbNCwgNV0KICAgIC8vIDAgMiAtPiBSYW5nZSBbMSwgM10KICAgIAogICAgaW50IG4gPSA2OwogICAgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiByZXF1aXJlbWVudHMgPSB7CiAgICAgICAgezEsIDJ9LCB7MSwgNH0sIHswLCAzfSwgezAsIDF9LCB7MywgNH0sIHswLCAyfQogICAgfTsKCiAgICBpbnQgcmVzdWx0ID0gZmluZE1heFBlb3BsZShuLCByZXF1aXJlbWVudHMpOwogICAgCiAgICBjb3V0IDw8ICJNYXhpbXVtIGdyb3VwIHNpemU6ICIgPDwgcmVzdWx0IDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0=