Problem:


My Solution:
#include<bits/stdc++.h>
using namespace std;
vector<int> solve(vector<int> talent, int talentsCount) {
const int n = (int)talent.size();
map<int, vector<int>> cnt;
for(int i = 0; i < n; i++) {
cnt[talent[i]].push_back(i);
}
for(auto& [k, v]: cnt) {
reverse(v.begin(), v.end());
}
vector<int> ans(n, -1);
int mx = -1;
for(int i = 1; i <= talentsCount; i++) {
if(cnt[i].size() == 0) return ans;
else mx = max(mx, cnt[i].back());
}
ans[0] = mx + 1;
for(int i = 1; i < n; i++) {
int val = talent[i - 1];
cnt[val].pop_back();
if(cnt[val].size() == 0) return ans;
mx = max(mx, cnt[val].back());
ans[i] = mx - i + 1;
}
return ans;
}
int main() {
int n; cin >> n;
vector<int> talent(n);
for(auto& e: talent) cin >> e;
int talentsCount; cin >> talentsCount;
auto ans = solve(talent, talentsCount);
for(auto& e: ans) cout << e << ' ';
return 0;
}Complexity Analysis:
Time: O(n.log(n)) (can be reduced to O(n) using unordered_map)
Space: O(n)