제출 #1279875

#제출 시각아이디문제언어결과실행 시간메모리
1279875ducanh0811Foehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
91 ms7380 KiB
#include <bits/stdc++.h>
#define int long long
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i)
#define REV(i, a, b) for (int i = (a), _b = (b); i >= _b; --i)
using namespace std;

int n, m, s, t;
#define MAXN 200005
int a[MAXN];


int bit[MAXN];

void upd(int p, int val) {
    for (; p <= n; p += p & -p) bit[p] += val;
}

void updrange(int u, int v, int val) {
    upd(u, +val);
    upd(v + 1, -val);
}

int get(int x){
    int res = 0;
    while (x) res += bit[x], x -= x & -x;
    return res;
}

int cost(int x, int delta) {
    int f1 = a[x] + get(x);
    int f2 = a[x + 1] + get(x + 1);
    if (f1 < f2) return (f1 - f2) * s * delta;
    return (f1 - f2) * t * delta;
}

void solve(){
    cin >> n >> m >> s >> t;
    int res = 0;
    FOR(i, 0, n) cin >> a[i];
    FOR(i, 0, n - 1) res += cost(i, 1);
    FOR(i, 1, m){
        int l, r, v; cin >> l >> r >> v;
        if (l - 1 >= 0) res += cost(l - 1, -1);
        if (r + 1 <= n) res += cost(r, -1);
        updrange(l, r, v);
        if (l - 1 >= 0) res += cost(l - 1, 1);
        if (r + 1 <= n) res += cost(r, 1);
        cout << res << '\n';
    }
}

#define task "test"
int32_t main(){
    if (fopen(task".inp","r")){
        freopen(task".inp","r",stdin);
        freopen(task".out","w",stdout);
    }
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    solve();
    return 0;
}

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

foehn_phenomena.cpp: In function 'int32_t main()':
foehn_phenomena.cpp:55:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   55 |         freopen(task".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
foehn_phenomena.cpp:56:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   56 |         freopen(task".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...