【发布时间】:2017-11-16 22:59:10
【问题描述】:
问题是用户输入 N,1
5 // N
1 // First line
2 // Second line ... to fifth
3
4
5
3 // Q
0 4 // the two numbers a, b... Q times
1 3
2 2
输出将是
15 // from 0 to 4 : 1+2+3+4+5=15
9 // from 1 to 3 : 2+3+4=9
3 // from 2 to 2 : 3
如果 Q 和 N 都大 100000,我的代码执行时间超过 5 秒
#include <bits/stdc++.h>
#include<vector>
#include<numeric>
#include<functional>
using namespace std;
int main() {
int a,b,c,p1,p2,sum(0);
vector<int>t(0);
cin>>a;
for(int i(0);i<a;++i)
{
cin>>b;
t.push_back(b);
}
cin>>c;
for(int i(0);i<c;++i)
{
sum=0;
cin>>p1>>p2;
sum=accumulate(t.begin()+p1,t.begin()+p2+1,0);
cout<<sum<<endl;
}
return 0;
}
【问题讨论】:
-
如果您的程序正常运行并且只有性能问题,codereview.stackexchange.com 将是一个更好的提问位置。请务必阅读该网站的提问指南:codereview.stackexchange.com/help/asking。
-
提示:不要存储实际数字,存储运行总数
S(i)==x_0 + ... + x_i。那么从a到b的总和就是S(b) - S(a-1) -
我投票结束这个问题,因为工作代码的改进属于 CodeReview.StackExchange.com