单调栈的入门使用 #include <cstdio> using namespace std; const int MAX = 80010; int data[MAX]; int stack[MAX]; int n,stacki; long long find() { long long sum = 0 ; stacki = 0 ; for( int i = 0 ; i != n ; ++i ) { while( stacki != 0 && data[ stack[ stacki - 1 ] ] <= data[i] ) { sum += i - stack[ --stacki ] - 1 ; } stack[ stacki++ ] = i; } while( stacki != 0 ) sum += n - stack[ --stacki ] - 1 ; return sum; } int main() { scanf("%d",&n); for( int i = 0 ; i != n ; ++i ) scanf("%d",&data[i]); printf("%lld/n",find()); return 0; }