Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何优化下面的程序?_C++_Sorting_Data Structures_Implementation_Array Algorithms - Fatal编程技术网

C++ 如何优化下面的程序?

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&

给您一个长度为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>>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;