I had the same BFS idea as one of the AC code this: because dying pattern is spead from the initial dying ones :)
#include <iostream> #include <queue> #include <vector> using namespace std; int main() { int N; cin >> N; vector<int> P(N + 1, -1); // Dancing Links vector<int> pre(N + 1); vector<int> nex(N + 1); // Markers vector<int> day(N + 1); for(int i = 0; i < N; i ++) { cin >> P[i]; } // Fill initial queue queue<int> q; for(int i = N-1; i > 0; i--) { pre[i]=i-1; nex[i]=i+1; if(P[i] > P[i-1]) { day[i]=1; q.push(i); } } int ans = 0; while(!q.empty()) { int cur=q.front(); q.pop(); ans = day[cur]; // Dis-link current index pre[nex[cur]]=pre[cur]; nex[pre[cur]]=nex[cur]; if(P[nex[cur]] > P[pre[cur]]){ day[nex[cur]] = day[cur]+1; q.push(nex[cur]); } } cout << ans << endl; return 0; }