Atlassian India | Women In Tech | OA | 2022 | Problem 3 Solution
Anonymous User
682

Problem:
image
image

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)

Comments (1)