不知道为什么这个写的一直超市,自己想了好多样例都过了
#include<iostream>
#include<stdio.h>
#include<stack>
using namespace std;
int a[100010];
int max1=0;
int l,r;
void check(int x,int y,int min){
int sum=0;
for(int i=x+1;i<=y;i++){
sum+=a[i];
//cout<<"sum="<<sum<<endl;
}
//cout<<"min="<<min<<endl;
int b=sum*min;
if(b>=max1){
max1=b;
l=x+1;
r=y;
}
}
int main(){
int n;
cin>>n;
int c=0;
for(int i=1;i<=n;i++){
cin>>a[i];
c+=a[i];
}
if(c==0){
cout<<"0"<<endl;
cout<<"1 "<<n<<endl;
}else{
a[0]=0;
a[n+1]=0;
stack<int> q;
q.push(0);
for(int i=1;i<=n+1;i++){
while(a[q.top()]>a[i]){
//cout<<a[q.top()]<<" "<<a[i]<<endl;
int index=q.top();
q.pop();
check(q.top(),i-1,a[index]);
//cout<<l<<" "<<r<<endl;
//cout<<max1<<endl;
}
q.push(i);
}
cout<<max1<<endl;
cout<<l<<" "<<r<<endl;
}
return 0;
}
/*
6
1 2 3 4 5 6
6
6 5 4 3 2 1
6
0 0 0 0 1 0
11
1 2 3 4 5 0 6 1 2 3 4
4
1 2 3 4
3
1 0 3
*/