题意给你一串数字,有两种算法,具体回答哪一种算法需要看输入的数字,第一种算法就是将给定的数字顺序从第r个累加到第l个,第二种算法是将给定的顺序再从小到大排序一遍,再从第r个累加到第l个.
方法就是分别将第一种算法与第二种算法都预先打表存放好,输入那个我就直接输出那个就是了,记住一定要先打好表,如果输一个算一个会TLE的,具体方法参照代码.
#include<cstdio>
#include<algorithm>
using namespace std;
long long arr[100005],v[100005],u[100005];
int t;
void vchuli()
{ int i;
for(i=1;i<=t;i++){
v[i]=arr[i]+v[i-1];
}
}
void uchuli()
{ int i;
sort(arr+1,arr+t+1);
for(i=1;i<=t;i++){
u[i]=arr[i]+u[i-1];
}
}
int main()
{ int i,a,l,r,k;
scanf("%d",&t);
for(i=1;i<=t;i++){
scanf("%lld",&arr[i]);
}
vchuli();
uchuli();
scanf("%d",&k);
while(k--){
scanf("%d %d %d",&a,&l,&r);
if(a==1)
printf("%lld\n",v[r]-v[l-1]);
else
printf("%lld\n",u[r]-u[l-1]);
}
}