Submission #1204967

#TimeUsernameProblemLanguageResultExecution timeMemory
1204967minhpkFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
70 ms8872 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
pair<int,int> z[1000000];
int x[1000000];
int sum=0;
int flip[2];
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int a,b,c,d;
    cin >> a >> b >> c >> d;
    cin >> x[0];
    c=-c;
    flip[1]=c;
    flip[0]=d;
    for (int i=1;i<=a;i++){
        cin >> x[i];
        if (x[i]>x[i-1]){
            z[i]={abs(x[i]-x[i-1]),1};
            sum+=c*abs(x[i]-x[i-1]);
        }else{
            z[i]={abs(x[i]-x[i-1]),0};
            sum+=d*abs(x[i]-x[i-1]);
        }
    }
   // cout << sum << " ";
    for (int i=1;i<=b;i++){
         int x,y,t;
         cin >> x >> y >> t;
         int del=0;
         del+= flip[z[x].second]*z[x].first;

         if (y!=a){
             del+= flip[z[y+1].second]*z[y+1].first;
         }
      //   cout <<  flip[z[x].second]*z[x].first << " " << flip[z[y+1].second]*z[y+1].first << "\n";
      //   cout << "\n";
         sum-=del;
         int flip1,flip2;

         if (z[x].second==1){
             flip1=1;
         }else{
             flip1=-1;
         }

         if (z[x].first +flip1*t <0){
             z[x].first = abs(z[x].first +flip1*t);
             z[x].second = 1-z[x].second;
         }else{
             z[x].first +=flip1*t;
         }
         sum+= flip[z[x].second]*z[x].first;

         if (y!=a){
             if (z[y+1].second==1){
                 flip2=-1;
             }else{
                 flip2=1;
             }
             if (z[y+1].first+flip2*t<0){
                 z[y+1].first = abs(z[y+1].first +flip2*t);
                 z[y+1].second = 1-z[y+1].second;
             }else{
                 z[y+1].first = z[y+1].first +flip2*t;
             }
             sum+= flip[z[y+1].second]*z[y+1].first;
         }
         cout << sum << "\n";


     //    for (int j=1;j<=a;j++){
     //        cout << z[j].first << " " << z[j].second << "\n";
     //    }
     //    cout << "\n";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...