Submission #244199

#TimeUsernameProblemLanguageResultExecution timeMemory
244199Osama_AlkhodairyPort Facility (JOI17_port_facility)C++17
0 / 100
5 ms384 KiB
#include <bits/stdc++.h>
using namespace std;
#define finish(x) return cout << x << endl, 0
#define ll long long

int n, mod = 1e9 + 7;
vector <int> a;


int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    a.resize(2 * n);
    vector <int> l(n + 1), r(n + 1);
    for(int i = 1 ; i <= n ; i++){
        cin >> l[i] >> r[i];
        l[i]--; r[i]--;
        a[l[i]] = i;
        a[r[i]] = -i;
    }
    int ans = 0;
    vector <int> vis(n + 1);
    vector <int> g, h;
    for(auto &i : a){
        if(i < 0){
            i *= -1;
            if(h.size() && h.back() == i){
                h.pop_back();
                for(int j = (int)g.size() - 1 ; j >= 0 ; j--){
                    if(l[g[j]] > l[i]) ans--;
                    else break;
                }
                continue;
            }
            vector <int> c;
            while(g.size() && g.back() != i){
                c.push_back(g.back());
                g.pop_back();
            }
            if(g.size() == 0) finish(0);
            g.pop_back();
            reverse(c.begin(), c.end());
            for(auto &i : c){
                ans--;
                h.push_back(i);
            }
        }
        else{
            g.push_back(i);
            ans++;
        }
    }
    int res = 1;
    while(ans--){
        res *= 2;
        if(res >= mod) res -= mod;
    }
    cout << res << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...