子列的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是所选子数组中最后一个元素的下一个元素的迭代器;
posted @ 2015-11-06 17:09  Nagihiko  阅读(133)  评论(0编辑  收藏  举报