标签:
题意:有个数列,有三种操作:
1 X 把X加入数列中;
2 去掉数列中最小数;
3 输出数列中最大数。
由于每次输出的都是最大数,所以只要记录最大数就可以了。去掉数的时候不一定要去掉最小数,只要去掉不是最大数的任意一个数都可以,所以还要一个变量记录数列中有多少个数。现在问题就简单了,输入1 X时,判断X和数列中最大数比较,如果X大数列中最大值变为X并且数列个数加1,否则只要数列个数加1.输入 2 时,数列个数减就可以了。输入 3 时直接输出最大值就可以了。
还有一种方法叫 STL很简单。就不多说了。
普通:
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 int main() 5 { 6 int a=-0x7FFFFFFF,t=0,n; 7 int x,y; 8 scanf("%d",&n); 9 while (n--) 10 { 11 scanf("%d",&x); 12 if (x==1) 13 { 14 scanf("%d",&y); 15 if (y>a) a=y; 16 t++; 17 } 18 if (x==2) 19 { 20 if (t) t--; 21 if (t==0) a=-0x7FFFFFFF; 22 } 23 if (x==3) 24 { 25 if (t==0) printf("0\n"); 26 else printf("%d\n",a); 27 } 28 } 29 return 0; 30 }
STL
1 #include<cstdio> 2 #include<cstring> 3 #include<set> 4 using namespace std; 5 set<int>s; 6 set<int>::iterator it; 7 int main() 8 { 9 int n,x,y; 10 scanf("%d",&n); 11 s.clear(); 12 while (n--) 13 { 14 scanf("%d",&x); 15 if (x==1) 16 { 17 scanf("%d",&y); 18 s.insert(y); 19 } 20 if (x==2) 21 { 22 if (!s.empty()) 23 { 24 it=s.begin(); 25 s.erase(it); 26 } 27 } 28 if (x==3) 29 { 30 if (s.empty()) printf("0\n"); 31 else 32 { 33 it=s.end(); 34 it--; 35 printf("%d\n",*it); 36 } 37 } 38 } 39 return 0; 40 }
标签:
原文地址:http://www.cnblogs.com/pblr/p/4731414.html