C++ 如何优化下面的程序?
给您一个长度为N的数组A。对于任何给定的整数X,您需要找到一个严格大于X的整数Z,以便在数组A中不存在Z。您需要最小化Z的值 输入: 第一行:两个空格分隔的整数N和Q,表示数组A和 分别查询的数量 第二行:N个表示数组元素的空间分隔整数 接下来的Q行:每行由一个整数X组成 输出: 打印Q行,每行表示对应查询的答案 样本输入:C++ 如何优化下面的程序?,c++,sorting,data-structures,implementation,array-algorithms,C++,Sorting,Data Structures,Implementation,Array Algorithms,给您一个长度为N的数组A。对于任何给定的整数X,您需要找到一个严格大于X的整数Z,以便在数组A中不存在Z。您需要最小化Z的值 输入: 第一行:两个空格分隔的整数N和Q,表示数组A和 分别查询的数量 第二行:N个表示数组元素的空间分隔整数 接下来的Q行:每行由一个整数X组成 输出: 打印Q行,每行表示对应查询的答案 样本输入: 5 2 2 7 5 9 15 3 9 样本输出: 4 10 来源- 我的解决方案- int main() { ll n,q; cin>>n&
5 2
2 7 5 9 15
3
9
样本输出:
4
10
来源-
我的解决方案-
int main()
{
ll n,q;
cin>>n>>q;
map<ll,bool>mp;
for(ll i=0;i<n;i++)
{
ll x;
cin>>x;
mp[x]=true;
}
while(q--)
{
ll x;
cin>>x;
x++;
while(mp[x])
{
x++;
}
cout<<x<<endl;
}
}
您的查询复杂性在*Z-X上 您可能已经使用以下选项将On+Z-X缩减为On+Z-X:
但我认为在预处理中构建时间间隔将允许更好的性能间隔。您的查询复杂性在*Z-X上 您可能已经使用以下选项将On+Z-X缩减为On+Z-X:
但我认为,在预处理中构建时间间隔将允许更好的性能间隔。第0步是,在启用编译器优化的情况下构建代码。您认为/希望所有输入都有效,最好检查它们是提示:下限是检查值的良好起点只有真值的std::map可能会被std::set替换。步骤0将是,在启用编译器优化的情况下构建代码。您假设/希望所有输入都有效,最好检查它们是否正确提示:下限是检查值的良好起点只有真值的td::map可能会被std::set.Hey@Jarod42替换。请详细说明一下。在30个测试用例中,我只通过了3个测试用例。因此,请提供更多关于如何降低时间复杂性的解释。我的意思是,如果数字是1 2 3 4 5 6 7 8 9 10 40,您可以创建简单的间隔[1;10][40;40],以降低查询的复杂性。Hey@Jarod42您能详细说明一下吗。在30个测试用例中,我只通过了3个测试用例。因此,请提供更多关于如何降低时间复杂度的解释。我的意思是,如果数字是1 2 3 4 5 6 7 8 9 10 40,您可以创建简单的间隔[1;10][40;40],以降低查询的复杂度。
ll x;
std::cin >> x;
x++;
auto it = mp.find(x);
if (it != mp.end()) {
while (it != mp.end() && it->first == x) {
++it;
++x;
}
}
std::cout << x << std::endl;