描述
百度是喵哈哈村的赞助商,所以百度派出了嘟嘟熊给大家展现魔法:
“我歌月徘徊,我舞影零乱。醒时同交欢,醉后各分散。”
只见刹那间,嘟嘟熊就从兜里面掏出了一堆数字,这一堆数字仿佛有了生命,不停的在空气中跃动。
嘟嘟熊的魔法是瞬间将某一个数字转变成其他的数字!只见“嗖”的一下,嘟嘟熊迅速抬起自己的手,凌空一指!其中的一个数字,就变成了另外一个数字了!
这时候,嘟嘟熊转身向戴尔廖提问:“请问这些数字中,第二大的数是什么?”
戴尔廖支支吾吾的不知所措。
这时候戴尔廖望向了你,你是戴尔廖的迷妹,所以你应该帮帮他。
输入
本题包含若干组测试数据。
第一行两个整数n,m,分别表示数字的个数,嘟嘟熊的操作个数。
第二行n个整数,表示嘟嘟熊出来的n个数是什么。
接下来m行:
1 x y,即将第x个数,变成y
2,即查询当前第二大的数是什么。
数据保证,2<=n,m<=100000,1<=a[i],y<=100,1<=x<=n
输出
对于每个询问,输出答案。
样例输入1
3 6
1 1 1
2
1 1 2
1 2 2
2
1 1 3
2
样例输出1
1
2
2
A :
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100005;
int a[maxn], num[105];
int main() {
int n, m;
while(cin >> n >> m) {
memset(num, 0, sizeof(num));
for (int i = 1; i <= n; ++i) {
cin >> a[i];
++num[a[i]];
}
for (int i = 1; i <= m; ++i) {
int t;
cin >> t;
if(t == 1) {
int x, y;
cin>>x>>y;
--num[a[x]];
a[x] = y;
++num[a[x]];
} else {
int cnt = 2; // 当最大的数有重复时候,比如1,2,2,此时第二大的数应该是2,而不是1
for (int j = 100; j >= 0; --j) {
if (num[j] >= cnt) {
cout << j << endl;
break;
} else if(num[j] == 1){
--cnt;
} else {
continue;
}
}
}
}
}
return 0;
}