#include #include #include #include #include #include #define MAX 210000 #define LIMIT 1000000000 using namespace std; typedef valarray VI; typedef stack SVI; typedef vector VB; inline bool wykonaj(SVI& Stos, VB& E, const char* polec, int x) { int n=(int)E.size(); if (!strcmp(polec,"NUM")) Stos.push(VI(x,n)); else if (!strcmp(polec,"POP")) { if (Stos.size()<1) return true; //Error Stos.pop(); } else if (!strcmp(polec,"INV")) { if (Stos.size()<1) return true; //Error VI Z=Stos.top(); Stos.pop(); Stos.push(-Z); } else if (!strcmp(polec,"DUP")) { if (Stos.size()<1) return true; //Error Stos.push(Stos.top()); } else if (!strcmp(polec,"SWP")) { if (Stos.size()<2) return true; //Error VI A=Stos.top(); Stos.pop(); VI B=Stos.top(); Stos.pop(); Stos.push(A); Stos.push(B); } else if (!strcmp(polec,"ADD")) { if (Stos.size()<2) return true; //Error VI A=Stos.top(); Stos.pop(); VI B=Stos.top(); Stos.pop(); VI Wyn=B+A; for (int i=0; iLIMIT || Wyn[i]<-LIMIT) E[i]=true; } Stos.push(Wyn); } else if (!strcmp(polec,"SUB")) { if (Stos.size()<2) return true; //Error VI A=Stos.top(); Stos.pop(); VI B=Stos.top(); Stos.pop(); VI Wyn=B-A; for (int i=0; iLIMIT || Wyn[i]<-LIMIT) E[i]=true; } Stos.push(Wyn); } else if (!strcmp(polec,"MUL")) { if (Stos.size()<2) return true; //Error VI A=Stos.top(); Stos.pop(); VI B=Stos.top(); Stos.pop(); VI Wyn=B*A; for (int i=0; iLIMIT || Wyn[i]<-LIMIT) E[i]=true; } Stos.push(Wyn); } else if (!strcmp(polec,"DIV")) { if (Stos.size()<2) return true; //Error VI A=Stos.top(); Stos.pop(); VI B=Stos.top(); Stos.pop(); for (int i=0; i