#include #include #include #include using namespace std; // [5, 3, 7, 2, 4, 1, 0, 7, 2, 5, 2] // # # // # # // # # # # // # # # # # // ### # # # // ##### #### // ###### #### // ----------- // ViĊĦine stopnic, kaksen je razgled desno? int razgled_v_desno(int i, const vector& v) { // & je pomemben!! for (int j = i+1; j < v.size(); ++j) { if (v[i] < v[j]) { return j - i - 1; } } return -1; } struct Stolpnica { int visina, pos; }; int main() { int n; cin >> n; vector v(n); for (int i = 0; i < n; ++i) { cin >> v[i]; } /* for (int i = 0; i < n; ++i) { int r = razgled_v_desno(i, v); cout << r << endl; } */ vector razgled(n); vector blokirajo; for (int i = n-1; i >= 0; --i) { // Manjse stolpnice me ne blokirajo, in tudi nikogar drugega ne bodo mogle. while (!blokirajo.empty() && blokirajo.back().visina <= v[i]) { blokirajo.pop_back(); } if (blokirajo.empty()) { razgled[i] = -1; } else { // blokira me blokirajo.back() razgled[i] = blokirajo.back().pos - i - 1; } // Jaz blokiram vse levo od sebe. blokirajo.push_back({.visina = v[i], .pos = i}); } for (int r : razgled) cout << r << endl; // Vsaka stolpnica gre 1x na sklad, in mogoce enkrat s sklada. return 0; }