题目描述ios
众所周知,金拱门最好吃的汉堡就是板烧鸡腿堡。固然XP也是这么以为的。 spa
某个周末,XP到了一条金拱门街游玩,这条街上有n家金拱门的店铺,每一个店铺都有必定的板烧鸡腿堡储量ai。如今,为了快乐,XP想在这条街道上买尽量多的板烧鸡腿堡。可是,与此同时,出于某种汉堡哲学,当XP在第j个店铺买了xj个板烧鸡腿堡以后,必须保证在全部知足i>j的第i家店铺中都须要购买而且所买的板烧鸡腿堡的数量xi都大于xj 。 code
如今,XP给了你这些店铺的数量,和他们的板烧鸡腿堡储量,你能够帮他算出,他最多能够买多少的板烧鸡腿堡嘛?
ci输入string
第一行给出一个整数n (1≤n≤2*105) ,表明这条街上的金拱门的数量 。
第二行给出n个整数 ai(1≤ai≤109) ,表明第i家金拱门店铺的板烧鸡腿堡储量 。it输出io
输出XP所能买的最多的板烧鸡腿堡的数量。class
样例输入 Copystream
5 1 2 1 3 6样例输出 Copymap
10
#include<iostream> #include<stdio.h> #include<algorithm> #include<cstring> #include<map> #include<iterator> #include<cmath> using namespace std; typedef long long llint; typedef int32_t lint; lint a[200005]; int main() { int t; while(cin>>t){ int i; for(i=0;i<t;++i){ cin>>a[i]; } llint p=a[t-1]; llint s=a[t-1]; if(s==0){ cout<<0<<endl; continue; } for(i=t-2;i>=0;--i){ if(p==1){ break; } if(a[i]>=p){ s+=(p-1); p=p-1; }else if(a[i]<p){ s+=a[i]; p=a[i]; } } cout<<s<<endl; } return 0; }