一开始想一定要处理o2结果一直超时,后来想想只有o3操作才需要输出,也就是只要保留最大值就可以了,然后用一个值来表示我们已经加入了多少元素,删除后还剩多少元素但是这些实际上是虚的,只需要在意max值
#include<iostream>
#include<cstdio>
using namespace std;
int N;
int main()
{
while(scanf("%d",&N)!=EOF)
{
int o1,o2,sum=0,max=0,ji=0;
int i;
for(i=1;i<=N;i++)
{
scanf("%d",&o1);
if(o1==1)
{
scanf("%d",&o2);
sum++;
if(ji==0){max=o2;ji=1;}
else if(o2>=max)
{
max=o2;
}
}
if(o1==2)
{
if(ji==0){continue;}
if(sum==1){sum--;ji=0;continue;}
else{sum--;}
}
if(o1==3)
{
if(ji==0){printf("0\n");}
else{printf("%d\n",max);}
}
}
}
return 0;
}
//顺便附上我真实假如o2的操作代码但是超时了
#include<iostream>
#include<cstdio>
using namespace std;
int N;
int partition(int min[], int i, int j,int a[]);
void quicksort(int min[],int left, int right,int a[]);
int main()
{
while(scanf("%d",&N)!=EOF)
{
int min[100002]={0},max[100002]={0},minr=0,maxr=0,maxm=2;//min,max存储的是下标
int a[100002]={0};
int i,j=0,jishu=0,o1=0,o2=0,ji=0;//o1,o2表示操作变量
for(i=1;i<=N;i++)
{
scanf("%d",&o1);
if(o1==1)
{
j++;
scanf("%d",&o2);
a[j]=o2;
if(ji==0){minr++;maxr++;min[minr]=max[maxr]=j;ji=1;}
else
{
if(o2<a[max[maxr]])
{
if(o2<=min[minr])
{minr++;
min[minr]=j;}
else
{
minr++;
min[minr]=j;
quicksort(min,1,minr,a);
}
}
if(o2>=a[max[maxr]]){maxr++;max[maxr]=j;}
}
}
else if(o1==2)
{
if(maxr==0){continue;}
if(minr>0)
{
min[minr]=0;minr--;
printf("minr=%d\n",minr);
//if(minr==0){maxm++;}
}
else
{
if(maxm==maxr&&maxr!=1)
{
maxm=2;
max[maxr]=0;
maxr=0;
ji=0;
}
else
{
max[maxm]=0;maxm++;
printf("maxm=%d\n",maxm);
}
}
}
else
{
if(max[maxr]==0)
{
printf("0\n");
}
else
{
if(minr>0)
{
printf("max=%d,min=%d\n",a[max[maxr]],a[min[minr]]);
}
else
{
printf("max=%d,min=%d\n",a[max[maxr]],a[max[maxm]]);
}
}
}
}
}
return 0;
}
int partition(int min[], int i, int j,int a[])
{
int key = a[min[i]];
while(i < j)
{
while(i < j && a[min[j]] <= key) j--;
swap(min[i], min[j]);
while(i < j && a[min[i]] >= key ) i++;
swap(min[i], min[j]);
}
return i;
}
void quicksort(int min[],int left, int right,int a[])
{
if(left< right)
{
int i = partition(min,left, right,a);
quicksort(min,left, i -1,a);
quicksort(min,i + 1, right,a);
}
}