suoi38 卖XY序列 (贪心+前缀和)

因为只能带一个,买卖价格又一样,所以只要右边的比左边的大,就从这买下来然后带到下一个卖掉就行了(我想到别处再卖的话大不了再重新买回来嘛)

所以给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
",s[r]-s[l]);
30     }
31     return 0;
32 }
原文地址:https://www.cnblogs.com/Ressed/p/9782220.html