Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- #define double long double
- #define pb push_back
- #define randGen mt19937 rng(chrono::steady_clock::now().time_since_epoch().count())
- const int INF = 1e18;
- const int MOD = 1e9 + 7;
- map<int, int> a;
- signed main() {
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.tie(NULL);
- int n;
- cin >> n;
- vector<int> sum[n + 1], sum1[n + 1];
- for (int i = 0; i < n; ++i) {
- int h;
- cin >> h;
- for (int j = 1; j * j <= h && j <= n; ++j) {
- if (h / j <= n && h / j != j) {
- sum[h / j].pb(i);
- }
- sum[j].pb(i);
- }
- }
- for (int i = 0; i < n; ++i) {
- if (i > 0) {
- sum1[1].pb(sum1[1].back() + 1);
- } else {
- sum1[1].pb(1);
- }
- sum1[1][sum1[1].size() - 1] %= MOD;
- }
- for (int i = 2; i <= n; ++i) {
- for (int j = 0; j < sum[i].size(); ++j) {
- auto it = lower_bound(sum[i - 1].begin(), sum[i - 1].end(), sum[i][j]);
- int u = it - sum[i - 1].begin(), pl = 0;
- if (u != 0) {
- pl = sum1[i - 1][u - 1];
- }
- if (sum1[i].empty()) {
- sum1[i].pb(pl % MOD);
- } else {
- sum1[i].pb(sum1[i].back() + pl);
- sum1[i][sum1[i].size() - 1] %= MOD;
- }
- }
- }
- int suma = 0;
- for (int i = 1; i <= n; ++i) {
- if (sum1[i].empty()) {
- continue;
- }
- suma += sum1[i].back();
- }
- cout << suma;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement