Submission #166992

#TimeUsernameProblemLanguageResultExecution timeMemory
166992egekabasPort Facility (JOI17_port_facility)C++14
0 / 100
6117 ms864128 KiB
#include <bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long   ll;
typedef unsigned long long   ull;
typedef long double ld;
typedef pair<ll, ll>    pll;
typedef pair<ull, ull>    pull;
typedef pair<int, int>  pii;
typedef pair<ld, ld>  pld;
map<pair<ll, pair<stack<pll>, stack<pll>>>, ll> dp;
map<pair<ll, pair<stack<pll>, stack<pll>>>, ll> calc;
ll n;
pll ar[1000009];
ll mod = 1e9+7;
map<pair<stack<pll>, stack<pll>>, ll> mpp;
map<pair<stack<pll>, stack<pll>>, ll> mppnew;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    
    cin >> n;
    for(ll i = 0; i < n; ++i)
        cin >> ar[i].ff >> ar[i].ss;
    sort(ar, ar+n);
    stack<pll> tmp;
    tmp.push({0, 1e18});
    mpp[{tmp, tmp}] = 1;
    for(ll i = 0; i < n; ++i){
        for(auto u : mpp){
            stack<pll> tmpa = u.ff.ff;
            stack<pll> tmpb = u.ff.ss;
            while(tmpa.top().ss < ar[i].ff)
                tmpa.pop();
            while(tmpb.top().ss < ar[i].ff)
                tmpb.pop();
            if(tmpa.top().ss > ar[i].ss){
                tmpa.push(ar[i]);
                mppnew[{tmpa, tmpb}] += u.ss;
                mppnew[{tmpa, tmpb}] %= mod;
                tmpa.pop();
            }
            if(tmpb.top().ss > ar[i].ss){
                tmpb.push(ar[i]);
                mppnew[{tmpa, tmpb}] += u.ss;
                mppnew[{tmpa, tmpb}] %= mod;
                tmpb.pop();
            }
        }
        mpp = mppnew;
        mppnew.clear();
    }
    ll ans = 0;
    for(auto u : mpp){
        ans = (ans+u.ss)%mod;
    }
    cout << ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...