제출 #391019

#제출 시각아이디문제언어결과실행 시간메모리
391019cpp219Foehn Phenomena (JOI17_foehn_phenomena)C++14
0 / 100
1094 ms25432 KiB
#pragma GCC optimization "Ofast"
#pragma GCC optimization "unroll-loop"
#pragma GCC target ("avx2")

#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define fs first
#define sc second
using namespace std;
const ll N = 2e5 + 9;
const ll inf = 1e18 + 7;
const ll Log2 = 20;
typedef pair<ll,ll> LL;

ll n,Q,s,t,a[N],temp[N];
ll st[2][4*N],lazy[2][4*N],L,R,x;

void Pass(ll cond,ll id){
    ll t = lazy[cond][id]; lazy[cond][id] = 0;
    st[cond][id*2] += t; st[cond][id*2 + 1] += t;
    lazy[cond][id*2] += t; lazy[cond][id*2 + 1] += t;
}

void upd(ll cond,ll id,ll l,ll r,ll u,ll v,ll val){
    if (v < l||r < u) return;
    if (u <= l&&r <= v){
        st[cond][id] += val; lazy[cond][id] += val;
        return;
    }
    ll mid = (l + r)/2; Pass(cond,id);
    upd(cond,id*2,l,mid,u,v,val); upd(cond,id*2 + 1,mid + 1,r,u,v,val);
    st[cond][id] = max(st[cond][id*2],st[cond][id*2 + 1]);
}

ll Get(ll cond,ll id,ll l,ll r,ll u){
    if (!u) return 0;
    if (u < l||r < u) return -inf;
    if (l == r) return st[cond][id];
    ll mid = (l + r)/2; Pass(cond,id);
    return max(Get(cond,id*2,l,mid,u),Get(cond,id*2 + 1,mid + 1,r,u));
}
/// 0 for a     1 for temp

ll Get_temp(ll a,ll b){
    if (a < b) return (a - b)*s;
    return (a - b)*t;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    #define task "tst"
    if (fopen(task".inp","r")){
        freopen(task".inp","r",stdin);
        //freopen(task".out","w",stdout);
    }
    cin>>n>>Q>>s>>t;
    for (ll i = 0;i <= n;i++) cin>>a[i];
    for (ll i = 0;i < n;i++){
        temp[i + 1] = temp[i];
        if (a[i] < a[i + 1]) temp[i + 1] -= (a[i + 1] - a[i])*s;
        else temp[i + 1] += (a[i] - a[i + 1])*t;
        upd(0,1,1,n,i + 1,i + 1,a[i + 1]); upd(1,1,1,n,i + 1,i + 1,temp[i + 1]);
    }
    //cout<<temp[1]; return 0;
    //for (ll i = 1;i <= n;i++) cout<<Get(1,1,1,n,i)<<" "; return 0;
    while(Q--){
        cin>>L>>R>>x;
        ll prv0 = Get(0,1,1,n,L),prv1 = Get(1,1,1,n,L);
        ll new_temp = prv0 + x; new_temp = Get(1,1,1,n,L - 1) + Get_temp(Get(0,1,1,n,L - 1),new_temp);
        ll diff = new_temp - prv1; //cout<<diff; return 0;
        upd(1,1,1,n,L,R,diff); upd(0,1,1,n,L,R,x);
        ll diff2 = Get(1,1,1,n,R) + Get_temp(Get(0,1,1,n,R),Get(0,1,1,n,R + 1)) - Get(1,1,1,n,R + 1);
        //cout<<diff2; exit(0);
        //upd(1,1,1,n,R + 1,n,diff2);
        //for (ll i = 1;i <= n;i++) cout<<Get(1,1,1,n,i)<<" "; return 0;
        cout<<Get(1,1,1,n,n)<<"\n";
    }
}

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

foehn_phenomena.cpp:1: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
    1 | #pragma GCC optimization "Ofast"
      | 
foehn_phenomena.cpp:2: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
    2 | #pragma GCC optimization "unroll-loop"
      | 
foehn_phenomena.cpp: In function 'int main()':
foehn_phenomena.cpp:74:12: warning: unused variable 'diff2' [-Wunused-variable]
   74 |         ll diff2 = Get(1,1,1,n,R) + Get_temp(Get(0,1,1,n,R),Get(0,1,1,n,R + 1)) - Get(1,1,1,n,R + 1);
      |            ^~~~~
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);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...