C++ 使用数组存储1*10^5个整数项时如何避免TLE

C++ 使用数组存储1*10^5个整数项时如何避免TLE,c++,arrays,C++,Arrays,当数组(n)中的条目数为1*10^5时,我的代码显示TLE。我该怎么办?我看到了提交状态,在所有情况下都运行良好,除了最后一种情况,当n为100000时,它显示时间限制错误 问题:: 我的解决方案: 代码: #包括 #包括 使用名称空间std; int main(){ ios_base::与_stdio同步(false); cin.tie(空); cout.tie(空); int t; cin>>t; int-arr[t]; int ARRFEQ[t]; 整数和=1; 对于(int i=0;i>

当数组(n)中的条目数为1*10^5时,我的代码显示TLE。我该怎么办?我看到了提交状态,在所有情况下都运行良好,除了最后一种情况,当n为100000时,它显示时间限制错误

问题:: 我的解决方案:

代码:

#包括
#包括
使用名称空间std;
int main(){
ios_base::与_stdio同步(false);
cin.tie(空);
cout.tie(空);
int t;
cin>>t;
int-arr[t];
int ARRFEQ[t];
整数和=1;
对于(int i=0;i>arr[t];
总和+=arr[t];
arrfreq[i]=总和;
}
int m;
cin>>m;
int-qsn[m];
int k;
对于(int i=0;i>qsn[i];
}

对于(int j=0;j您正在使用一个循环来计算桩数。您可以做的是在为qsn输入的同一个循环中找到答案。只需输入qsn并在该循环中找到桩数。这将降低代码的时间复杂性并消除TLE错误。

我看到了其他解决方案在互联网上发现std::lower_bound函数是用来避免T.L.E

但有一件事,正如互联网上提到的,这个函数返回一个指向下限的指针,那么,为什么我们要从中减去c,然后再减去+1(在最后一行的第二行)?(参考代码)

#包括
使用名称空间std;
int main()
{
int n,i,m,j,cnt=0,ans,x,sum=0;
cin>>n;
int a[n],c[n];
对于(i=0;i>a[i];
总和+=a[i];
c[i]=总和;
}
cin>>m;
int b[m];
对于(i=0;i>b[i];

对于(j=0;jStackOverflow!欢迎使用Stackoverflow!您能解释更多可能的未知单词
TPE
(缩写为what)和
10万行吗?请删除代码中不必要的空行。
#包括使用命名空间std;
-永远不要这样做。
int-arr[t]是一个可变长度数组,而不是C++。一些编译器支持它,作为扩展(从C99借用)。可能是在吹你的栈。使用<代码> STD::向量< /代码>。@ HcDeVe,TLE代表“超过时限”。。根据经验,TLE错误是由低效的算法引起的。很可能,您需要一个更好的算法。通过优化实现,您可能可以节省一些时间,但一般来说,您需要一个更高效的算法。按您所说的做了,它仍然显示TLE…只是显示代码的最后更改部分。让我知道我你的意思是别的。intk;for(inti=0;i>qsn[i];k=qsn[i];for(intj=0;j
#include <iostream>
#include<bits/stdc++.h>
using namespace std;


int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int t;
  cin>>t;
  int arr[t];
  int arrfreq[t];
  int sum=1;
  for(int i=0;i<t;i++ )
  {
    cin>>arr[t];
    sum+=arr[t];
    arrfreq[i]=sum;     
}

int m;
cin>>m;
int qsn[m];
int k;
for(int i =0;i<m;i++)
{
  cin>>qsn[i];
}

for(int j =0;j<t;j++)
{
    if(k<arrfreq[j])
    {
      cout<<j+1<<"\n";
      break;
    }
    if(k==arrfreq[j])
      {
        cout<<j+2<<"\n";
        break;
      }
}
}
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n,i,m,j,cnt=0,ans,x,sum=0;
    cin>>n;
    int a[n],c[n];
    for(i=0; i<n; i++){
       cin>>a[i];
       sum+=a[i];
       c[i]=sum;
    }
    cin>>m;
    int b[m];
    for(i=0; i<m; i++) cin>>b[i];
    for(j=0; j<m; j++)
    {
         cout<<lower_bound(c,c+n,b[j])-c+1<<endl;
    }

    return 0;
}