This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int DEBUT = -1;
const int FIN = 1;
struct Event {
int pos, id, type, data;
};
bool operator < (const Event& a, const Event& b) {
if(a.pos == b.pos) return a.type < b.type;
return a.pos < b.pos;
}
int nbInters, nbCoords;
int nbProjs = 0;
vector<pair<int, int>> inters;
vector<Event> events;
void ajoute_inter(int deb, int fin) {
inters.push_back({deb, fin});
events.push_back({deb, nbProjs, DEBUT, fin});
events.push_back({fin, nbProjs, FIN, -1});
nbProjs++;
}
signed main() {
ios_base::sync_with_stdio(false);
cin >> nbInters >> nbCoords;
for(int iInter = 0;iInter < nbInters;iInter++) {
int deb, fin;
cin >> deb >> fin;
if(fin < deb) fin += nbCoords;
ajoute_inter(deb, fin);
ajoute_inter(deb + nbCoords, fin + nbCoords);
}
sort(events.begin(), events.end());
vector<vector<int>> suivs(nbProjs, vector<int>(20, -1));
pair<int, int> meilleureFin = {-1, -1}; // pos, id
for(Event& ev : events) {
if(ev.type == DEBUT) {
if(ev.data > meilleureFin.first) {
meilleureFin.first = ev.data;
meilleureFin.second = ev.id;
}
} else if(ev.type == FIN) {
if(meilleureFin.first > ev.pos) {
suivs[ev.id][0] = meilleureFin.second;
}
}
}
for(int puis = 1;puis < 20;puis++) {
for(int iProj = 0;iProj < nbProjs;iProj++) {
if(suivs[iProj][puis - 1] != -1) {
suivs[iProj][puis] = suivs[suivs[iProj][puis - 1]][puis - 1];
}
}
}
int minSelects = 1e9;
for(int iProj = 0;iProj < nbProjs;iProj++) {
int debActuel = inters[iProj].first;
int nbSelects = 1;
int iFin = iProj;
for(int puis = 19;puis >= 0;puis--) {
if(suivs[iFin][puis] == -1) continue;
int finActuel = inters[suivs[iFin][puis]].second;
if(finActuel < debActuel + nbCoords) {
nbSelects += (1 << puis);
iFin = suivs[iFin][puis];
}
}
if(suivs[iFin][0] != -1) {
minSelects = min(minSelects, nbSelects + 1);
}
}
if(minSelects == 1e9) cout << -1 << endl;
else cout << minSelects << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |