Submission #1212835

#TimeUsernameProblemLanguageResultExecution timeMemory
1212835loomBoat (APIO16_boat)C++20
0 / 100
102 ms4384 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 5e18
#define nl '\n'

const int mod = 1e9+7;

int exp(int a, int b = mod-2){
   int p = 1;  
   while(b > 0){
      if(b % 2) p = p * a % mod;
      a = a * a % mod;
      b /= 2;
   }
   return p;
}

inline void solve(){
   int n;
   cin>>n;
   vector<pair<int,int>> ab(n+1), lr;
   vector<int> v;

   for(int i=1; i<=n; i++){
      int a, b;
      cin>>a>>b;
      ab[i] = {a, b};
      v.push_back(a);
      v.push_back(b);
   }
   sort(v.begin(), v.end());

   lr.push_back({0, 0});
   for(int i=0; i < 2*n-1; i++){
      if(v[i] != v[i+1]) lr.push_back({v[i], v[i+1]-1});
   }
   lr.push_back({v[2*n-1], v[2*n-1]});

   int m = lr.size()-1;
   int dp[n+1][m+1];
   for(int i=0; i<=m; i++) dp[0][i] = 1;

   int ncr[m+1][n+1];
   for(int i=1; i<=m; i++){
      auto [l, r] = lr[i];
      int len = r-l+1;

      int p = 1, f = 1;
      for(int j=len, r=1; r <= min(len, n); j--, r++){
         f = f * r % mod;
         p = p * j % mod;
         ncr[i][r] = p * exp(f) % mod;
      }
   }

   for(int i=1; i<=n; i++){
      auto [a, b] = ab[i];
      dp[i][0] = 1;

      for(int j=1; j<=m; j++){
         auto [l, r] = lr[j];
         dp[i][j] = dp[i][j-1] + dp[i-1][j] - dp[i-1][j-1];

         for(int k=i; k>0; k--){
            auto [a, b] = ab[k];
            if(i-k+1 > r-l+1 or l < a or r > b) continue;

            dp[i][j] += dp[k-1][j-1] * ncr[j][i-k+1];
            dp[i][j] %= mod;
         }
      }
   }

   cout<<dp[n][m]-1;
}

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

   int t = 1;
   //cin>>t;
   while(t--) solve();

   return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...