제출 #288205

#제출 시각아이디문제언어결과실행 시간메모리
288205NemanjaSo2005Foehn Phenomena (JOI17_foehn_phenomena)C++14
40 / 100
538 ms15736 KiB
#include<bits/stdc++.h> #define ll long long #define LIMIT 7000000 using namespace std; ll koliko[200005],povecaj,res=0,T,S,N,Q,u1,u2,r1,r2,r3,r4,segmentno[400010]; char buffer[LIMIT],*pos; ll nadji(int gde){ ll ret=0; while(gde){ ret+=segmentno[gde]; gde/=2; } return ret; } void dodaj(int gde,int lb,int db,int l,int r){ if(lb>db or l>r) return; if(lb==l and db==r){ segmentno[gde]+=povecaj; return; } int mid=(l+r)/2; dodaj(gde*2,lb,mid,l,min(mid,r)); dodaj(gde*2+1,mid+1,db,max(l,mid+1),r); return; } ll getll(){ ll positive=1,number; while(*pos!='-' and *pos<48) *pos++; if(*pos=='-'){ *pos++; positive=-1; } else positive=1; number=*pos-'0'; *pos++; while(*pos>=48){ number=number*10+*pos-'0'; *pos++; } return positive*number; } int main(){ fread(buffer,1,LIMIT,stdin); pos=buffer; N=getll(); Q=getll(); S=getll(); T=getll(); N++; if(N<=5000){ for(int i=1;i<=N;i++) koliko[i]=getll(); for(int i=1;i<N;i++) if(koliko[i]<koliko[i+1]) res-=S*abs(koliko[i]-koliko[i+1]); else res+=T*abs(koliko[i]-koliko[i+1]); // cout<<res<<endl; while(Q--){ u1=getll(); u2=getll(); povecaj=getll(); u1++; u2++; r1=koliko[u1-1]; r2=koliko[u1]; r3=koliko[u2]; r4=koliko[u2+1]; if(u1!=1){ if(r1<r2) res+=(r2-r1)*S; else res-=(r1-r2)*T; } if(u2!=N){ if(r3<r4) res+=(r4-r3)*S; else res-=(r3-r4)*T; } // cout<<res<<endl; for(int i=u1;i<=u2;i++) koliko[i]+=povecaj; r2+=povecaj; r3+=povecaj; if(u1!=1){ if(r1<r2) res-=(r2-r1)*S; else res+=(r1-r2)*T; } if(u2!=N){ if(r3<r4) res-=(r4-r3)*S; else res+=(r3-r4)*T; } /* for(int i=1;i<=N;i++) cout<<koliko[i]<<" "; cout<<endl;*/ cout<<res<<endl; } return 0; } for(int i=1;i<=N;i++) koliko[i]=getll(); for(int i=1;i<N;i++) if(koliko[i]<koliko[i+1]) res-=S*abs(koliko[i]-koliko[i+1]); else res+=T*abs(koliko[i]-koliko[i+1]); // cout<<res<<endl; while(Q--){ u1=getll(); u2=getll(); povecaj=getll(); u1++; u2++; r1=nadji(u1-1+N); r2=nadji(u1+N); r3=nadji(u2+N); r4=nadji(u2+1+N); if(u1!=1){ if(r1<r2) res+=(r2-r1)*S; else res-=(r1-r2)*T; } if(u2!=N){ if(r3<r4) res+=(r4-r3)*S; else res-=(r3-r4)*T; } // cout<<res<<endl; dodaj(1,u1,u2,1,N); r2+=povecaj; r3+=povecaj; if(u1!=1){ if(r1<r2) res-=(r2-r1)*S; else res+=(r1-r2)*T; } if(u2!=N){ if(r3<r4) res-=(r4-r3)*S; else res+=(r3-r4)*T; } /* for(int i=1;i<=N;i++) cout<<koliko[i]<<" "; cout<<endl;*/ cout<<res<<endl; } return 0; }

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

foehn_phenomena.cpp: In function 'long long int getll()':
foehn_phenomena.cpp:30:9: warning: value computed is not used [-Wunused-value]
   30 |         *pos++;
      |         ^~~~~~
foehn_phenomena.cpp:32:9: warning: value computed is not used [-Wunused-value]
   32 |         *pos++;
      |         ^~~~~~
foehn_phenomena.cpp:37:5: warning: value computed is not used [-Wunused-value]
   37 |     *pos++;
      |     ^~~~~~
foehn_phenomena.cpp:40:9: warning: value computed is not used [-Wunused-value]
   40 |         *pos++;
      |         ^~~~~~
foehn_phenomena.cpp: In function 'int main()':
foehn_phenomena.cpp:45:10: warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   45 |     fread(buffer,1,LIMIT,stdin);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...