제출 #1112814

#제출 시각아이디문제언어결과실행 시간메모리
1112814Zero_OPFish 2 (JOI22_fish2)C++14
5 / 100
4085 ms2412 KiB
#include <bits/stdc++.h>

using namespace std;

template<typename T>
struct segment_tree{
    vector<T> st;
    int n;

    segment_tree(int n) : n(n), st(n * 2 + 1) {}

    void update(int i, T v){
        st[i += n] = v;
        for(; i > 1; i >>= 1){
            st[i >> 1] = max(st[i], st[i ^ 1]);
        }
    }

    T query(int l, int r){
         l += n;
         r += n + 1;
         T res = {0, 0};

         for(; l < r; l >>= 1, r >>= 1){
            if(l & 1) res = max(res, st[l++]);
            if(r & 1) res = max(res, st[--r]);
         }
         return res;
    }
};

template<typename T>
struct fenwick_tree{
    vector<T> bit;
    static constexpr int offset = 1;
    fenwick_tree(int n) : bit(n + 1, 0) {}

    void update(int id, T val){
        id += offset;
        for(; id < (int)bit.size(); id += id & (-id)){
            bit[id] += val;
        }
    }

    T query(int l, int r){
        T res(0);
        for(; l > 0; l -= l & (-l)) res -= bit[l];
        for(++r; r > 0; r -= r & (-r)) res += bit[r];
        return res;
    }
};

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    if(fopen("task.inp", "r")){
        freopen("task.inp", "r", stdin);
    }

    int N;
    cin >> N;
    vector<int> a(N + 2);
    for(int i = 1; i <= N; ++i){
        cin >> a[i];
    }

    const long long inf = 1e18;
    int Q;
    cin >> Q;
    while(Q--){
        int type;
        cin >> type;
        if(type == 1){
            int i, v;
            cin >> i >> v;
            a[i] = v;
        } else{
            int lq, rq;
            cin >> lq >> rq;

            vector<pair<int, int>> bad_intervals;

            vector<long long> pref(N + 1);
            for(int i = 1; i <= N; ++i) pref[i] = pref[i - 1] + a[i];

            for(int l = lq; l <= rq; ++l){
                for(int r = l; r <= rq; ++r){
                    if(l == lq && r == rq) continue;
                    long long target = min((l == lq ? inf : a[l - 1]), (r == rq ? inf : a[r + 1]));
                    if(pref[r] - pref[l - 1] < target) {
                        bad_intervals.emplace_back(l, r);
                    }
                }
            }

            assert((int)bad_intervals.size() <= N);
            vector<int> diff(N + 1);

            for(auto [l, r] : bad_intervals) {
                ++diff[l];
                if(r < N) --diff[r + 1]; 
            }

            int cnt = 0;
            for(int i = 1; i <= N; ++i){
                diff[i] += diff[i - 1];
                if(lq <= i && i <= rq && diff[i] == 0){
                    ++cnt;
                }
            }

            cout << cnt << '\n';
        }
    }

    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

fish2.cpp: In function 'int main()':
fish2.cpp:100:22: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  100 |             for(auto [l, r] : bad_intervals) {
      |                      ^
fish2.cpp:58:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   58 |         freopen("task.inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#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...