CCCPaste

Untitled

#include 
#include
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
const ll MOD = 1e9 + 7;
ll P, B;
int n;
ll arr[maxn];
int main()
{
    ios_base::sync_with_stdio(false);
    cin >> P >> B;
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> arr[i];
    }
    ll dp[n + 2][n + 2][n + 2] ;
    memset(dp, 0, sizeof dp);
    dp[1][0][0] = 1;
        for(int a = 0; a <= n; a++) {
            for(int b = 0; b <= n; b++) {
                for(int i = 1; i <= n; i++) {
                    // binary_search
                int next = (i + 1);
                int current = (i);
                if(a == 0 or arr[i] - arr[a] >= P) {
                  // query(i, b) += dp[current][a][b];
                    dp[next][i][b] += dp[current][a][b];
                    if(dp[next][i][b] >= MOD) {
                        dp[next][i][b] -= MOD;
                    }
                }
                if(b == 0 or arr[i] - arr[b] >= B) {
                    
                    dp[next][a][i] += dp[current][a][b];
                    if(dp[next][a][i] >= MOD) {
                        dp[next][a][i] -= MOD;
                    }
                }
            }
        }
    }
    ll ret = 0;
//    cout << dp[0][n][n] << " "<< dp[1][n][n]
    for(int a = 0; a <= n; a++) {
        for(int b = 0; b <= n; b++) {
            ret += dp[n + 1][a][b];
            ret %= MOD;
            cout << dp[0][a][b] << " " << dp[1][a][b] << endl;
        }
    }
    cout << ret << endl;
    return 0;
}
/*

 **/