제출 #831944

#제출 시각아이디문제언어결과실행 시간메모리
831944QwertyPiMeasures (CEOI22_measures)C++14
100 / 100
336 ms42964 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int MAXN = 2e5 + 11;

int n, m, d;

struct node{
    bool active; int _min, _max, _diff, lazy;
    node(): active(0), _min(0), _max(0), _diff(0), lazy(0){};
    node(int v) : active(1), _min(v), _max(v), _diff(0), lazy(0){};
    int get_diff(){ return _diff; }
};

node operator+ (const node& a, const node& b){
    node res;
    if(!a.active || !b.active){
        res = a.active ? a : b;
        res.lazy = 0;
        return res;
    }
    res.active = true;
    res._min = min(a._min, b._min);
    res._max = max(a._max, b._max);
    res._diff = max(max(a._diff, b._diff), a._max - b._min);
    res.lazy = 0;
    return res;
}

void operator+= (node& a, int x){
    a._min += x;
    a._max += x;
    a.lazy += x;
}

node t[MAXN << 2];

void st_push(int v){
    t[v * 2 + 1] += t[v].lazy;
    t[v * 2 + 2] += t[v].lazy;
    t[v].lazy = 0;
}

void st_range_add(int ql, int qr, int qv, int v = 0, int l = 0, int r = MAXN - 1){
    if(qr < l || r < ql) return;
    if(ql <= l && r <= qr) { t[v] += qv; }
    else {
        st_push(v);
        int m = (l + r) / 2;
        st_range_add(ql, qr, qv, v * 2 + 1, l, m);
        st_range_add(ql, qr, qv, v * 2 + 2, m + 1, r);
        t[v] = t[v * 2 + 1] + t[v * 2 + 2];
    }
}

void st_point_add(int qi, int qv, int v = 0, int l = 0, int r = MAXN - 1){
    if(l == r) { t[v] = node(t[v]._min + qv); }
    else {
        st_push(v);
        int m = (l + r) / 2;
        if(qi <= m) st_point_add(qi, qv, v * 2 + 1, l, m);
        else st_point_add(qi, qv, v * 2 + 2, m + 1, r);
        t[v] = t[v * 2 + 1] + t[v * 2 + 2];
    }
}

int st_point_qry(int qi, int v = 0, int l = 0, int r = MAXN - 1){
    if(l == r) return t[v]._max;
    st_push(v);
    int m = (l + r) / 2;
    if(qi <= m) return st_point_qry(qi, v * 2 + 1, l, m);
    else return st_point_qry(qi, v * 2 + 2, m + 1, r);
}

void add(int x, int v){
    st_range_add(x, MAXN - 1, -d);
    st_point_add(x, v);
}

int qry(){
    return t[0].get_diff();
}

int solve(vector<int>& a){
    vector<int> x;
    for(int i = 0; i < a.size(); i++){
        x.push_back(a[i] - i * d);
    }
    int mx = 0;
    for(int i = 0; i < x.size(); i++){
        for(int j = i; j < x.size(); j++){
            mx = max(mx, x[i] - x[j]);
        }
    }
    return mx;
}

int32_t main(){
    cin >> n >> m >> d;
    vector<int> a, b, ai, bi;
    for(int i = 0; i < n; i++) { 
        int v; cin >> v; a.push_back(v);
    }
    for(int i = 0; i < m; i++){
        int v; cin >> v; b.push_back(v);
    }
    vector<pair<int, int>> vp;
    for(int i = 0; i < n; i++){
        vp.push_back({a[i], i});
    }
    for(int i = 0; i < m; i++){
        vp.push_back({b[i], n + i});
    }
    sort(vp.begin(), vp.end());
    ai.resize(n); bi.resize(m);
    for(int i = 0; i < n + m; i++){
        if(vp[i].second < n){
            ai[vp[i].second] = i;
        }else{
            bi[vp[i].second - n] = i;
        }
    }
    for(int i = 0; i < n; i++){
        add(ai[i], a[i]);
    }
    for(int i = 0; i < m; i++){
        add(bi[i], b[i]);
        int ans = qry();
        cout << ans / 2 << (ans % 2 ? ".5" : "") << ' ';
    }
    cout << '\n';
}

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

Main.cpp: In function 'long long int solve(std::vector<long long int>&)':
Main.cpp:87:22: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |     for(int i = 0; i < a.size(); i++){
      |                    ~~^~~~~~~~~~
Main.cpp:91:22: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   91 |     for(int i = 0; i < x.size(); i++){
      |                    ~~^~~~~~~~~~
Main.cpp:92:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   92 |         for(int j = i; j < x.size(); j++){
      |                        ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...