Submission #1150068

#TimeUsernameProblemLanguageResultExecution timeMemory
1150068vladiliusBoat (APIO16_boat)C++20
0 / 100
2111 ms402788 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define pb push_back
#define ff first
#define ss second
const int mod = 1e9 + 7;

struct FT{
    vector<int> bit, a;
    int n;
    FT(int ns){
        n = ns;
        bit.resize(n + 1);
        a.resize(n + 1);
    }
    int get(int v){
        int out = 0;
        while (v > 0){
            out = (out + bit[v]) % mod;
            v = (v & (v + 1)) - 1;
        }
        return out;
    }
    void upd(int v, int x){
        x = (x - a[v]);
        a[v] = x;
        while (v <= n){
            bit[v] = (bit[v] + x) % mod;
            v |= (v + 1);
        }
    }
};

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n; cin>>n;
    vector<int> l(n + 1), r(n + 1);
    set<int> st;
    for (int i = 1; i <= n; i++){
        cin>>l[i]>>r[i];
        for (int j = l[i]; j <= r[i]; j++){
            st.insert(j);
        }
    }
    vector<int> a = {0};
    for (int j: st) a.pb(j);
    
    int m = (int) a.size() - 1;
    FT T(m);
    vector<int> :: iterator it;
    for (int i = 1; i <= n; i++){
        it = lower_bound(a.begin(), a.end(), r[i]);
        int f = (int) (it - a.begin());
        for (int j = r[i]; j >= l[i]; j--){
            T.upd(f, T.get(f) + 1);
            f--;
        }
    }
    int out = T.get(m);
    if (out < 0) out += mod;
    cout<<T.get(m)<<"\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...