結果
| 問題 | No.905 Sorted? | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2019-10-11 21:46:43 | 
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 287 ms / 2,000 ms | 
| コード長 | 3,094 bytes | 
| コンパイル時間 | 1,730 ms | 
| コンパイル使用メモリ | 142,300 KB | 
| 最終ジャッジ日時 | 2025-01-07 21:36:09 | 
| ジャッジサーバーID (参考情報) | judge2 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 23 | 
ソースコード
//include
//------------------------------------------
#include <vector>
#include <list>
#include <map>
#include <unordered_map>
#include <climits>
#include <set>
#include <unordered_set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <queue>
#include <random>
#include <complex>
#include <regex>
#include <locale>
#include <random>
#include <type_traits>
using namespace std;
#define SHOW_VECTOR(v) {std::cerr << #v << "\t:";for(const auto& xxx : v){std::cerr << xxx << " ";}std::cerr << "\n";}
#define SHOW_MAP(v){std::cerr << #v << endl; for(const auto& xxx: v){std::cerr << xxx.first << " " << xxx.second << "\n";}}
using LL = long long;
//------------------------------------------
//------------------------------------------
template<typename T>
class CulSum {
private:
    long long N;
    vector<T> a;
    vector<T> aa;
    vector<T> b;
    vector<T> bb;
public:
    /// @param a original array
    CulSum(vector<T> _a) {
        N = _a.size();
        a = _a;
        b = _a;
        reverse(b.begin(), b.end());
        this->aa = vector<T>(N + 1, T{});
        this->bb = vector<T>(N + 1, T{});
        for (int i = 0; i < N; i++) aa[i + 1] = a[i] + aa[i];
        for (int i = 0; i < N; i++) bb[i + 1] = b[i] + bb[i];
    }
    /// @brief 0-index original
    /// @param l original close
    /// @param r original open
    T get_sum(int l, int r) {
        return aa[r] - aa[l];
    }
    /// @brief 0-index original
    /// @param l original close
    /// @param r original open
    T get_sum_reverse(int l, int r) {
        l = N - l;
        r = N - r;
        return bb[l] - bb[r];
    }
    /// @brief 0-index original
    /// @param k length
    T get_sum_lead_k_len(int k) {
        return get_sum(0, k);
    }
    /// @brief 0-index original
    /// @param k length
    T get_sum_tail_k_len(int k) {
        return get_sum_reverse(N - k, N);
    }
    void show() {
        for (int i = 0; i < N + 1; i++) cout << aa[i] << " ";
        cout << endl;
    }
    void show_reverse() {
        for (int i = N; i >= 0; i--) cout << bb[i] << " ";
        cout << endl;
    }
};
int main() {
    int N;
    cin >> N;
    vector<LL> A(N);
    for (int i = 0; i < N; i++) cin >> A[i];
    vector<LL> B(N - 1);
    for (int i = 0; i < N - 1; i++) B[i] = (A[i + 1] - A[i]) >= 0;
    vector<LL> C(N - 1);
    for (int i = 0; i < N - 1; i++) C[i] = (A[i + 1] - A[i]) <= 0;
    CulSum<LL> culSum_B(B);
    CulSum<LL> culSum_C(C);
    int Q;
    cin >> Q;
    while (Q--) {
        int l, r;
        cin >> l >> r;
        if (culSum_B.get_sum(l, r) == r - l) cout << 1 << " ";
        else cout << 0 << " ";
        if (culSum_C.get_sum(l, r) == r - l) cout << 1 << endl;
        else cout << 0 << endl;
    }
    return 0;
}
            
            
            
        