题解:AT_abc448_c [ABC448c] Except and Min
思路
不难发现,答案必在按权值排序的前
实现也很简单:
- 将所有球按照权值
A_i 从小到大排序,注意需要记录它们原始的编号(因为删除时用的是原始编号)。 - 对于每个询问,我们从排序后的数组从头开始遍历,并判断如果该球的编号不在列表中,它就是答案,否则就继续遍历。
最后算一下时间复杂度,排序的时间复杂度是
代码
#include <bits/stdc++.h>
using namespace std;
struct node{
int id, val;
}a[300005];
int n, q;
int b[10];
bool cmp(node x, node y){
return x.val < y.val;
}
int main(){
cin >> n >> q;
for(int i = 1; i <= n; i++){
cin >> a[i].val;
a[i].id = i;
}
sort(a + 1, a + n + 1, cmp);
while(q--){
int k;
cin >> k;
for(int i = 1; i <= k; i++){
cin >> b[i];
}
for(int i = 1; i <= n; i++){
bool flag = true;
for(int j = 1; j <= k; j++){
if(b[j] == a[i].id){
flag = false;
break;
}
}
if(flag == true){
cout << a[i].val << '\n';
break;
}
}
}
}