My code is giving tle on using normal for loop. But, replacing the same with "for(auto& p : ans)" gets the code accpeted.
My code:
#include <iostream>
#include <queue>
#include <string>
using namespace std;
// struct comparator {
// bool operator()(int i, int j) {
// return i > j;
// }
// };
int main()
{
// ios_base::sync_with_stdio(false);
// cin.tie(0);
int t;
string ops[] = {"sd","insert","removeMin","getMin"};
vector <pair<int,int> > v;
scanf("%d",&t);
priority_queue<int> minHeap;
for(int i = 0;i<t;i++)
{
string op;
int x;
cin >> op;
//if(op != "removeMin")
// cin>>x;
if(op == "insert")
{
cin>>x;
minHeap.push(-x);
v.push_back(pair<int,int>(1,x));
}
else if(op=="getMin")
{
cin>>x;
while(!minHeap.empty() && -minHeap.top() < x)
{
minHeap.pop();
v.push_back(pair<int,int>(2,0));
}
if(minHeap.empty() || -minHeap.top() > x)
{
minHeap.push(-x);
v.push_back(pair<int,int>(1,x));
}
v.push_back(pair<int,int>(3,x));
}
else
{
if(minHeap.empty())
{
v.push_back(pair<int,int>(1,1));
}
else
minHeap.pop();
v.push_back(pair<int,int>(2,x));
}
}
cout<< v.size()<<endl;
for(int i = 0;i<v.size();i++) //this loops gives tle
{
if(v[i].first == 2)
cout<<ops[v[i].first]<<endl;
else
cout<<ops[v[i].first]<<" "<<v[i].second<<endl;
}
// for (auto& p : v) { //this loops gets accepted
// cout << ops[p.first];
// if (p.first != 2) {
// cout << " " << p.second;
// }
// cout << "\n";
// }
return 0;
}
Please Help.