美文网首页
CUIT-ACM 2017-01-14 新生训练赛E题菜鸟微见解

CUIT-ACM 2017-01-14 新生训练赛E题菜鸟微见解

作者: Anxdada | 来源:发表于2017-01-15 21:15 被阅读0次

题意给你一串数字,有两种算法,具体回答哪一种算法需要看输入的数字,第一种算法就是将给定的数字顺序从第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]);
    }
}


相关文章

网友评论

      本文标题:CUIT-ACM 2017-01-14 新生训练赛E题菜鸟微见解

      本文链接:https://www.haomeiwen.com/subject/qdlubttx.html