#include <iostream>
#include <stack>
using namespace std;
void test()
{
int Arr[] = {5,7,9,2,8,11,16,10,12};
int Sol[9];
stack<int> undecided; // or a stack implemented using a linked list
Sol[0] = -1; // this is a given
for(int i = 9 - 1; i != 0; --i) {
undecided.push(i); // we haven't found a smaller value for this Arr[i] item yet
// note that all the items already on the stack (if any)
// are smaller than the value of Arr[i] or they would have
// been popped off in a previous iteration of the loop
// below
while (!undecided.empty() && (Arr[i-1] < Arr[undecided.top()])) {
// the value for the item on the undecided stack is
// larger than Arr[i-1], so that's the index for
// the item on the undecided stack
Sol[undecided.top()] = i-1;
undecided.pop();
}
}
// We've filled in Sol[] for all the items have lesser values to
// the left of them. Whatever is still on the undecided stack
// needs to be set to -1 in Sol
while (!undecided.empty()) {
Sol[undecided.top()] = -1;
undecided.pop();
}
for (int i = 0; i < 9; ++i) {
cout << Sol[i] << ", ";
}
cout << "\n";
}
int main() {
test();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIHRlc3QoKQp7CglpbnQgQXJyW10gPSB7NSw3LDksMiw4LDExLDE2LDEwLDEyfTsKCWludCBTb2xbOV07CgoJc3RhY2s8aW50PiB1bmRlY2lkZWQ7ICAgLy8gb3IgYSBzdGFjayBpbXBsZW1lbnRlZCB1c2luZyBhIGxpbmtlZCBsaXN0CgoJU29sWzBdID0gLTE7ICAgIC8vIHRoaXMgaXMgYSBnaXZlbgoKCWZvcihpbnQgaSA9IDkgLSAxOyBpICE9IDA7IC0taSkgewoJICAgIHVuZGVjaWRlZC5wdXNoKGkpOyAvLyB3ZSBoYXZlbid0IGZvdW5kIGEgc21hbGxlciB2YWx1ZSBmb3IgdGhpcyBBcnJbaV0gaXRlbSB5ZXQKCSAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90ZSB0aGF0IGFsbCB0aGUgaXRlbXMgYWxyZWFkeSBvbiB0aGUgc3RhY2sgKGlmIGFueSkKCSAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHNtYWxsZXIgdGhhbiB0aGUgdmFsdWUgb2YgQXJyW2ldIG9yIHRoZXkgd291bGQgaGF2ZQoJICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWVuIHBvcHBlZCBvZmYgaW4gYSBwcmV2aW91cyBpdGVyYXRpb24gb2YgdGhlIGxvb3AKCSAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVsb3cKCQoJICAgIHdoaWxlICghdW5kZWNpZGVkLmVtcHR5KCkgJiYgKEFycltpLTFdIDwgQXJyW3VuZGVjaWRlZC50b3AoKV0pKSB7CgkgICAgICAgIC8vIHRoZSB2YWx1ZSBmb3IgdGhlIGl0ZW0gb24gdGhlIHVuZGVjaWRlZCBzdGFjayBpcwoJICAgICAgICAvLyAgbGFyZ2VyIHRoYW4gQXJyW2ktMV0sIHNvIHRoYXQncyB0aGUgaW5kZXggZm9yIAoJICAgICAgICAvLyAgdGhlIGl0ZW0gb24gdGhlIHVuZGVjaWRlZCBzdGFjawoJICAgICAgICBTb2xbdW5kZWNpZGVkLnRvcCgpXSA9IGktMTsKCSAgICAgICAgdW5kZWNpZGVkLnBvcCgpOwoJICAgIH0KCX0KCgkvLyBXZSd2ZSBmaWxsZWQgaW4gU29sW10gZm9yIGFsbCB0aGUgaXRlbXMgaGF2ZSBsZXNzZXIgdmFsdWVzIHRvCgkvLyAgdGhlIGxlZnQgb2YgdGhlbS4gIFdoYXRldmVyIGlzIHN0aWxsIG9uIHRoZSB1bmRlY2lkZWQgc3RhY2sKCS8vICBuZWVkcyB0byBiZSBzZXQgdG8gLTEgaW4gU29sCgkKCXdoaWxlICghdW5kZWNpZGVkLmVtcHR5KCkpIHsKCSAgICBTb2xbdW5kZWNpZGVkLnRvcCgpXSA9IC0xOwoJICAgIHVuZGVjaWRlZC5wb3AoKTsKCX0KCQoJZm9yIChpbnQgaSA9IDA7IGkgPCA5OyArK2kpIHsKCQljb3V0IDw8IFNvbFtpXSA8PCAiLCAiOwoJfQoJCgljb3V0IDw8ICJcbiI7Cn0KCgppbnQgbWFpbigpIHsKCXRlc3QoKTsKCXJldHVybiAwOwp9
-1, 0, 1, -1, 3, 4, 5, 4, 7,