Submission

Status:
[-SS][PPPP][-SS][-SSSSSS]

Score: 25

User: njoop

Problemset: ขั้นบันได

Language: cpp

Time: 0.125 second

Submitted On: 2024-11-26 23:30:07

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

int arr[100010], odd[100010], even[100010], n, cur, pre, q, l, r, cnt;

signed main() {
    cin >> n >> pre;
    for(int i=1; i<n; i++) {
        cin >> cur;
        int mx = max(cur, pre)-1;
        int mn = min(cur, pre)+1;
        if(mx-mn <= 0) continue;
        arr[mn]++;
        arr[mx+1]--;
        pre = cur;
    }
    for(int i=0; i<=100000; i++) {
        cnt += arr[i];
        if(i%2) {
            odd[i] += cnt;
        } else {
            even[i] += cnt;
        }
        odd[i] += odd[i-1];
        even[i] += even[i-1];
    }
    cin >> q;
    while(q--) {
        cin >> l >> r;
        if(l == 0) {
            cout << even[r] << " " << odd[r] << "\n";
        } else {
            cout << even[r]-even[l-1] << " " << odd[r]-odd[l-1] << "\n";
        }
    }
}