Submission #1222266

#TimeUsernameProblemLanguageResultExecution timeMemory
1222266onbertFish 2 (JOI22_fish2)C++20
8 / 100
4091 ms7480 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e5 + 5;
int n;
int a[maxn], sum[maxn];
vector<int> rng[maxn];

pair<int,int> eat(int i, int ll, int rr) {
    int l = i, r = i;
    while (true) {
        int oldl = l, oldr = r;
        int s = sum[r] - sum[l-1];
        int L = ll, R = l;
        while (L < R) {
            int mid = (L+R)/2;
            if (sum[l-1] - sum[mid-1] <= s) R = mid;
            else L = mid+1;
        }
        l = L;
        s = sum[r] - sum[l-1], L = r, R = rr;
        while (L < R) {
            int mid = (L+R+1)/2;
            if (sum[mid] - sum[r] <= s) L = mid;
            else R = mid-1;
        }
        r = R;
        if (l == oldl && r == oldr) break;
    }
    return {l, r};
}

signed main() {
    ios::sync_with_stdio(0); cin.tie(0);
    cin >> n;
    for (int i=1;i<=n;i++) cin >> a[i];
    sum[0] = 0;
    for (int i=1;i<=n;i++) sum[i] = a[i] + sum[i-1];

    for (int i=1;i<=n;i++) rng[i] = {i};

    // for (int i=1;i<=n;i++) {
    //     auto [l, r] cur = eat(i);
    //     rng[l].push_back(r);
    // }

    int q;
    cin >> q;
    while (q--) {
        int type, ll, rr;
        cin >> type >> ll >> rr;
        int ans = 0;
        for (int i=ll;i<=rr;i++) {
            auto [l, r] = eat(i, ll, rr);
            ans += (l == ll && r == rr);
        }
        cout << ans << "\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...