Submission #321632

#TimeUsernameProblemLanguageResultExecution timeMemory
321632daniel920712Foehn Phenomena (JOI17_foehn_phenomena)C++14
100 / 100
731 ms27372 KiB
#include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; long long all[200005],now=1; struct A { long long l,r; long long nxl,nxr; long long add; }Node[2000005]; void build(long long l,long long r,long long here) { Node[here].l=l; Node[here].r=r; Node[here].add=0; if(l==r) { Node[here].add=all[l]; return; } Node[here].nxl=now++; Node[here].nxr=now++; build(l,(l+r)/2,Node[here].nxl); build((l+r)/2+1,r,Node[here].nxr); } long long Find(long long where,long long here) { if(Node[here].l==where&&Node[here].r==where) return Node[here].add; if(where<=(Node[here].l+Node[here].r)/2) return Find(where,Node[here].nxl)+Node[here].add; else return Find(where,Node[here].nxr)+Node[here].add; } void add(long long l,long long r,long long con,long long here) { if(l==Node[here].l&&r==Node[here].r) { Node[here].add+=con; return; } if(r<=(Node[here].l+Node[here].r)/2) add(l,r,con,Node[here].nxl); else if(l>(Node[here].l+Node[here].r)/2) add(l,r,con,Node[here].nxr); else { add(l,(Node[here].l+Node[here].r)/2,con,Node[here].nxl); add((Node[here].l+Node[here].r)/2+1,r,con,Node[here].nxr); } } int main() { long long N,M,S,T,l,r,x,y,tt=0,con,i; scanf("%lld %lld %lld %lld",&N,&M,&S,&T); for(i=0;i<=N;i++) { scanf("%lld",&all[i]); if(i&&all[i-1]<all[i]) tt-=abs(all[i]-all[i-1])*S; if(i&&all[i-1]>=all[i]) tt+=abs(all[i]-all[i-1])*T; } build(0,N,0); //printf("%lld\n",tt); while(M--) { scanf("%lld %lld %lld",&l,&r,&con); x=Find(l,0); y=Find(l-1,0); if(y<x) tt+=abs(x-y)*S; if(y>=x) tt-=abs(x-y)*T; if(r!=N) { x=Find(r+1,0); y=Find(r,0); if(y<x) tt+=abs(x-y)*S; if(y>=x) tt-=abs(x-y)*T; //printf("%lld %lld\n",x,y); } add(l,r,con,0); x=Find(l,0); y=Find(l-1,0); if(y<x) tt-=abs(x-y)*S; if(y>=x) tt+=abs(x-y)*T; if(r!=N) { x=Find(r+1,0); y=Find(r,0); if(y<x) tt-=abs(x-y)*S; if(y>=x) tt+=abs(x-y)*T; //printf("%lld %lld\n",x,y); } printf("%lld\n",tt); } return 0; }

Compilation message (stderr)

foehn_phenomena.cpp: In function 'int main()':
foehn_phenomena.cpp:52:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   52 |     scanf("%lld %lld %lld %lld",&N,&M,&S,&T);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
foehn_phenomena.cpp:55:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   55 |         scanf("%lld",&all[i]);
      |         ~~~~~^~~~~~~~~~~~~~~~
foehn_phenomena.cpp:63:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   63 |         scanf("%lld %lld %lld",&l,&r,&con);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...