I am trying to solve SPOJ street parade. But i dont know what is wrong in the following code:
#include<iostream>
#include<algorithm>
#include<stack>
#include<cstdio>
using namespace std;
int main(){
int n,ne,last;
cin>>n;
while(n!=0){
int ar[n];
last=0;
stack <int> s;
for(int i=0;i<n;i++)
cin>>ar[i];
for(int i=0;i<n;i++){
if(s.top()==(last+1)){
s.pop();
last++;
}
else if(ar[i]==(last+1))
last++;
else if(!s.empty() && s.top()<ar[i]){
cout<<"no"<<endl;
continue;
}
else
s.push(ar[i]);
}
cout<<"yes"<<endl;
cin>>n;
}
return 0;
}
There are countless errors in that code.
if(s.top()==(last+1))
. If the stack is empty it will give RTE.continue
, when you should actually usebreak
. The way you do it, you might print nearly N statements in a single test case.if
statement if the top element in the stack is the one you need, when you must check it with awhile
statement because there might be cases when multiple elements are popped at once.Also, next time post your code in pastebin, ideone or some other paste site instead of pasting it directly in the message. Oh, and please post the link to the problem as well, so we don't have to google it!
Thank you I will change that and try.
It worked. Thanks :)