제출 #1238684

#제출 시각아이디문제언어결과실행 시간메모리
1238684shafi_rootWorst Reporter 3 (JOI18_worst_reporter3)C++20
12 / 100
6 ms1856 KiB
/* _In The Name Of God_ */

#include <bits/stdc++.h>
using namespace std;

#define maxs(a, b)			a = max(a, b)
#define mins(a, b)			a = min(a, b)
#define pb						push_back
#define F						first
#define S						second
#define lc						id << 1
#define rc						lc|1
#define mid						((l + r)/2)
#define int                     long long

typedef pair<int, int>     	pii;
typedef long long               	ll;

const ll  MOD    = 1e9  + 7; // 998244353;
const ll  INF    = 1e9  + 1;
const int MXN    = 2e5  + 5;
const int LOG    = 23;

ll Pow(ll a, ll b) { return !b ? 1 : (Pow(a*a %MOD, b/2) * (b&1 ? a : 1)) %MOD; }

int n, q, d[MXN];
pii dp[MXN];

void _solve() {
    cin >> n >> q;
    for (int i = 1; i <= n; i++) {
        cin >> d[i];
    }
    dp[1] = {d[1], d[1]};
    for (int i = 2; i <= n; i++) {
        if (dp[i-1].S > d[i]) {
            dp[i].F = dp[i-1].F;
            dp[i].S = dp[i-1].S;
        }
        else {
            int x = d[i] % dp[i-1].S == 0 ? d[i] : d[i] + dp[i-1].S - d[i] % dp[i-1].S;
            dp[i].S = x;
            dp[i].F = dp[i-1].F * (x / dp[i-1].S);
        }
    }
    while (q--) {
        int s, e, t;
        cin >> t >> s >> e;
        int l = 0, r = n+1;
        while (r - l > 1) {
            if (t / dp[mid].F * dp[mid].S - mid > e) l = mid;
            else r = mid;
        }
        int f = l;
        l = 0, r = n+1;
        while (r - l > 1) {
            if (t / dp[mid].F * dp[mid].S - mid >= s) l = mid;
            else r = mid;
        }
        cout << l - f + (s <= t && t <= e) << '\n';
    }
}

int32_t main() {
    cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
    int _ = 1;
    // cin >> _;
    while (_--) _solve();
    return 0.0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...