子列的S值之和
一个n元序列a[0],a[1],...a[n]的连续子列是a[i], a[i+1],...a[i+k],
其中i>=0, i+k<=n.
连续子列的S值=max(a[i],a[i+1],...a[i+k])-min(a[i],a[i+1],...a[i+k]) .
要求所有子列的S值之和。
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int main() 5 { 6 int n; 7 cin>>n; 8 int a[n+1]; 9 for(int i=0; i<n; i++) 10 { 11 cin>>a[i]; 12 } 13 long m,s=0; 14 for(int i=0; i<n+1; i++) //这里是i<n+1(以及下面的j<n+1),需要注意下.. 15 { 16 for(int j=i; j<n+1; j++) 17 { 18 m=*max_element(a+i,a+j)-*min_element(a+i,a+j); 19 s+=m; 20 } 21 } 22 cout<<s<<endl; 23 return 0; 24 }
max_element和min_element的使用:
emplate <class ForwardIterator>
ForwardIterator max_element ( ForwardIterator first, ForwardIterator last );
其中,,
ForwardIterator first是第一个元素的迭代器
ForwardIterator last是所选子数组中最后一个元素的下一个元素的迭代器;