CodeForces 681C Heap Operations
2016-08-22 19:02
441 查看
一道模拟题,开一个优先队列进行模拟就可以了,主要边界条件以及队列为空的状态
#include"iostream"
#include"cmath"
#include"iomanip"
#include"stdio.h"
#include"string"
#include"queue"
#include"vector"
using namespace std;
priority_queue<int ,vector<int >,greater<int> > q;
int v[1000005];
char c[1000005];
int n,m;
char s[10];
int x;
int main()
{
int sum=0;
while(!q.empty()) q.pop();
cin>>n;
while(n--)
{
//cout<<1<<endl;
scanf("%s",s); //cout<<s<<endl;
if(s[0]=='i')
{
scanf("%d",&x); //cout<<x<<endl;
q.push(x);
c[sum]='i';
v[sum++]=x;
}
else if(s[0]=='r')
{
if(q.empty())
{
c[sum]='i';
v[sum++]=0;
c[sum++]='r';
}
else
{
q.pop();
c[sum++]='r';
}
}
else if(s[0]=='g')
{
scanf("%d",&x); //cout<<x<<endl;
if(q.empty())
{
c[sum]='i';
v[sum++]=x;
q.push(x);
c[sum]='g';
v[sum++]=x;
}
else
{
//int w=q.top();
while(!q.empty()&&q.top()<x)
{
c[sum++]='r';
q.pop();
//if(!q.empty()) w=q.top();
} //cout <<1<<endl;
if(!q.empty()&&q.top()==x)
{
c[sum]='g';
v[sum++]=x;
}
else
{
c[sum]='i';
v[sum++]=x;
q.push(x);
c[sum]='g';
v[sum++]=x;
}
}
}
}
cout<<sum<<endl;
for(int i=0;i<sum;i++)
if(c[i]=='i') printf("insert %d\n", v[i]);
else if(c[i]=='r') printf("removeMin\n");
else if(c[i]=='g') printf("getMin %d\n",v[i]);
return 0;
}
#include"iostream"
#include"cmath"
#include"iomanip"
#include"stdio.h"
#include"string"
#include"queue"
#include"vector"
using namespace std;
priority_queue<int ,vector<int >,greater<int> > q;
int v[1000005];
char c[1000005];
int n,m;
char s[10];
int x;
int main()
{
int sum=0;
while(!q.empty()) q.pop();
cin>>n;
while(n--)
{
//cout<<1<<endl;
scanf("%s",s); //cout<<s<<endl;
if(s[0]=='i')
{
scanf("%d",&x); //cout<<x<<endl;
q.push(x);
c[sum]='i';
v[sum++]=x;
}
else if(s[0]=='r')
{
if(q.empty())
{
c[sum]='i';
v[sum++]=0;
c[sum++]='r';
}
else
{
q.pop();
c[sum++]='r';
}
}
else if(s[0]=='g')
{
scanf("%d",&x); //cout<<x<<endl;
if(q.empty())
{
c[sum]='i';
v[sum++]=x;
q.push(x);
c[sum]='g';
v[sum++]=x;
}
else
{
//int w=q.top();
while(!q.empty()&&q.top()<x)
{
c[sum++]='r';
q.pop();
//if(!q.empty()) w=q.top();
} //cout <<1<<endl;
if(!q.empty()&&q.top()==x)
{
c[sum]='g';
v[sum++]=x;
}
else
{
c[sum]='i';
v[sum++]=x;
q.push(x);
c[sum]='g';
v[sum++]=x;
}
}
}
}
cout<<sum<<endl;
for(int i=0;i<sum;i++)
if(c[i]=='i') printf("insert %d\n", v[i]);
else if(c[i]=='r') printf("removeMin\n");
else if(c[i]=='g') printf("getMin %d\n",v[i]);
return 0;
}
相关文章推荐
- Codeforces 67C. Sequence of Balls DP!
- codeforces 278B New Problem
- Codeforces 474 D Flowers(DP)
- codeforces 707D Persistent Bookcase
- Codeforces 771C
- CodeForces 478 E.Wavy numbers(折半枚举+map)
- Codeforces 899D Shovel Sale
- Codeforces 148D - Bag of mice 概率dp
- codeforces 387D George and Interesting Graph(二分图最大匹配)
- Codeforces--618B--Guess the Permutation(规律)
- codeforces 180E Cubes 双指针经典题
- CodeForces - 711D Directed Roads(dfs判环)
- CodeForces - 359D Pair of Numbers (单调栈)
- codeforces 899b
- codeforces 148D Bag of mice(概率DP)
- (DP) codeforces 358D
- Codeforces--366A--Dima and Guards(水题)
- codeforces 199D Jumping on Walls
- CodeForces - 711C Coloring Trees(DP)(思维)
- Codeforces 851C . Five Dimensional Points 计算几何,结论