题意很简单就不说了,这题暴力肯超时,用哈希表,从后往前遍历扫出每个值之后空闲的位置
貌似并差集也可以做
/* * this code is made by LinMeiChen * Problem: * Type of Problem: * Thinking: * Feeling: */ #include<iostream> #include<algorithm> #include<stdlib.h> #include<string.h> #include<stdio.h> #include<math.h> #include<string> #include<vector> #include<queue> #include<list> using namespace std; typedef long long lld; typedef unsigned int ud; #define oo 0x3f3f3f3f #define maxn 200014 int Hash[maxn]; int main() { int T, n, m, va, last; scanf("%d", &T); while (T--) { scanf("%d%d", &n, &m); memset(Hash, 0, sizeof Hash); for (int i = 1; i <= n; i++) { scanf("%d", &va); Hash[va] = 1; } for (int i = maxn - 1; i >= 0; i--) { if (Hash[i] == 0) { last = i; Hash[i] = last; } else Hash[i] = last; } for (int i = 1; i <= m; i++) { scanf("%d", &va); printf("%d\n", Hash[va]); } } return 0; }