1. 程式人生 > >suoi38 賣XY序列 (貪心+前綴和)

suoi38 賣XY序列 (貪心+前綴和)

前綴和 ace 重新 pac getchar() for 價格 memset set

因為只能帶一個,買賣價格又一樣,所以只要右邊的比左邊的大,就從這買下來然後帶到下一個賣掉就行了(我想到別處再賣的話大不了再重新買回來嘛)

所以給max(w[i]-w[i-1],0)維護一個前綴和就行了

 1 #include<bits/stdc++.h>
 2 #define pa pair<int,int>
 3 #define CLR(a,x) memset(a,x,sizeof(a))
 4 using namespace std;
 5 typedef long long ll;
 6 const int maxn=1e6+10;
 7 
 8 inline ll rd(){
9 ll x=0;char c=getchar();int neg=1; 10 while(c<0||c>9){if(c==-) neg=-1;c=getchar();} 11 while(c>=0&&c<=9) x=x*10+c-0,c=getchar(); 12 return x*neg; 13 } 14 15 int N,M; 16 ll s[maxn]; 17 18 int main(){ 19 //freopen(".in","r",stdin); 20 int i,j,k;
21 N=rd(); 22 for(i=2,j=rd();i<=N;i++){ 23 k=rd(); 24 s[i]=s[i-1]+max(k-j,0); 25 j=k; 26 }M=rd(); 27 for(i=1;i<=M;i++){ 28 int l=rd(),r=rd(); 29 printf("%lld\n",s[r]-s[l]); 30 } 31 return 0; 32 }

suoi38 賣XY序列 (貪心+前綴和)