class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        vector<int> t;
        int n = temperatures.size();

        vector<int> ans(n, 0);

        for(int i = n-1; i >= 0; i -- ){
            int tmp = temperatures[i];
            int l = 0, r = t.size() - 1, a = 0;
            while(l <= r){
                int m = (l+r)/2;

                if(temperatures[t[m]] > tmp){
                    a = t[m] - i;
                    l = m+1;
                } else {
                    r = m-1;
                }
            }
            ans[i] = a;
            while(t.size() > 0 && temperatures[t.back()] <= tmp){
                t.pop_back();
            }
            t.push_back(i);
        }
        return ans;
    }
};