记录编号 317100 评测结果 AAAAAAAAAA
题目名称 梦游仙境 最终得分 100
用户昵称 Gravatar哒哒哒哒哒! 是否通过 通过
代码语言 C++ 运行时间 3.529 s
提交时间 2016-10-07 17:32:28 内存使用 217.06 MiB
显示代码纯文本
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <algorithm>
  6. #include <cmath>
  7. using namespace std;
  8. #define ll long long
  9. ll read(){
  10. ll x=0,f=1;char ch;
  11. while(ch=getchar(),ch<'!');
  12. if(ch=='-') f=-1,ch=getchar();
  13. x=ch-48;
  14. while(ch=getchar(),ch>'!') x=x*10+ch-48;
  15. return x*f;
  16. }
  17. const ll maxn=101000;
  18. ll n,m,size;
  19. ll block[maxn],c[maxn],sum[400][maxn];
  20. ll query_1(ll l,ll r,ll jump){
  21. ll ans=0;
  22. for(ll i=l;i<=r;i+=jump) ans+=c[i];
  23. return ans;
  24. }
  25. ll query_2(ll l,ll r,ll jump){
  26. r=r-((r-l)%jump);
  27. if(r<=l) return c[l];
  28. return sum[jump][l]-sum[jump][r+jump];
  29. }
  30. int main(){
  31. freopen("XTTMYXJ.in","r",stdin);freopen("XTTMYXJ.out","w",stdout);
  32. n=read(),m=read(),size=sqrt(n);
  33. for(ll i=1;i<=n;i++) block[i]=(i-1)/size+1;
  34. for(ll i=1;i<=n;i++) c[i]=read();
  35. for(ll i=1;i<=size;i++)
  36. for(ll j=n;j>=1;j--)
  37. sum[i][j]=sum[i][j+i]+c[j];
  38. for(ll i=1;i<=m;i++){
  39. ll l=read(),r=read(),jump=read();
  40. if(jump==0) printf("%lld\n",c[l]);
  41. else if(jump>size) printf("%lld\n",query_1(l,r,jump));
  42. else printf("%lld\n",query_2(l,r,jump));
  43. }
  44. getchar();getchar();
  45. fclose(stdin);fclose(stdout);
  46. return 0;
  47. }