Envío 2539
Caso # |
Resultado |
Tiempo |
Memoria |
#1 |

Incorrecto
|
0.007 s
|
2 KBi |
#2 |

Incorrecto
|
0.006 s
|
4 KBi |
#3 |

Incorrecto
|
0.008 s
|
1 KBi |
#4 |

Incorrecto
|
0.006 s
|
1 KBi |
#5 |

Incorrecto
|
0.006 s
|
4 KBi |
#6 |

Incorrecto
|
0.248 s
|
6 KBi |
#7 |

Incorrecto
|
0.2 s
|
5 KBi |
#8 |

Incorrecto
|
0.32 s
|
9 KBi |
#9 |

Incorrecto
|
0.252 s
|
7 KBi |
#10 |

Incorrecto
|
0.484 s
|
8 KBi |
Puntos totales: 0 / 100
Código
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
vector<int> getBlockHeights(vector<int> &h){
stack<pair<int,int>> s;
vector<int>sol(h.size(),0);
for(int i=0;i<h.size();i++){
if(s.size()==0){
s.push({i,h[i]});
}
else{
if(s.size()>0 && s.top().second>=h[i]){
s.push({i,h[i]});
}
else{
while(s.size()>0 && s.top().second<=h[i]){
auto sTop = s.top();
if(sTop.second==h[i]){
sol[sTop.first] = -1;
}
else{
sol[sTop.first] = h[i];
}
s.pop();
}
s.push({i,h[i]});
}
}
}
while(s.size()>0){
auto sTop = s.top();
sol[sTop.first] = -1;
s.pop();
}
return sol;
}
int main(){
int c;
cin>>c;
while(c--){
int n;
cin>>n;
vector<int> heights(n,0);
for(auto &h: heights){
cin>>h;
}
vector<int> sol = getBlockHeights(heights);
for(int val: sol){
cout<<val<<" ";
}
cout<<endl;
}
return 0;
}