• JZ初中OJ 1567. [GDKOI]简单题


    题目描述

        给你N个整数A1,A2,….,AN,你可以进行两种操作:一种把一给定区间的每个数是增加一个值;另一种是计算某一给定区间的数字的和。
     

    输入

        第一行包含两个整数N和Q.1<=N,Q<=100000

    第二行包含N个整数,是A1,A2,….,AN的初始值。-1000000000<=Ai<=1000000000

    接下来Q行,描述操作。

    “C a b c”表示把Aa,Aa+1,….Ab都增加c,-10000<=c<=10000。

    “Q a b”表示询问Aa,Aa+1,….,Ab的和。

    输出

    对于每个询问输出对应的和,每行一个。
     

    样例输入

    10 5
    1 2 3 4 5 6 7 8 9 10
    Q 4 4
    Q 1 10
    Q 2 4
    C 3 6 3
    Q 2 4

    样例输出

    4
    55
    9
    15
     

    数据范围限制

    【限制】

    30%数据 N,Q<=10000
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 long long n,q,d,s,c1[100001],sum1[100001],c2[100001],a[100001];
     4 char w;
     5 long long lowbit(long long x)
     6 {
     7     return x&(-x);
     8 }
     9 long long sum(long long c[],long long x)
    10 {
    11     long long ret=0;
    12     while(x>0)
    13     {
    14         ret+=c[x];
    15         x-=lowbit(x);
    16     }
    17     return ret;
    18 }
    19 void add(long long c[],long long x,long long y)
    20 {
    21     while(x<=n)
    22     {
    23         c[x]+=y;
    24         x+=lowbit(x);
    25     }
    26 }
    27 int main()
    28 {
    29     freopen("simple.in","r",stdin);
    30     freopen("simple.out","w",stdout);
    31     cin>>n>>q;
    32     for(int i=1;i<=n;i++)
    33     {
    34         cin>>a[i];
    35         sum1[i]=sum1[i-1]+a[i];
    36     }
    37     for(int j=1;j<=q;j++)
    38     {
    39         cin>>w;
    40         cin>>s>>d;
    41         if(int(w)==int('Q'))
    42         {
    43             long long suml=sum1[s-1]+s*sum(c1,s-1)-sum(c2,s-1);
    44             long long sumd=sum1[d]+(d+1)*sum(c1,d)-sum(c2,d);
    45             cout<<sumd-suml<<endl; 
    46         }
    47         else 
    48         {
    49             long long cost;
    50             cin>>cost;
    51             add(c1,s,cost);
    52             add(c1,d+1,-cost);
    53             add(c2,s,s*cost);
    54             add(c2,d+1,-(d+1)*cost);
    55         }
    56     }
    57     return 0;
    58 }
  • 相关阅读:
    随笔1
    随笔
    shared_ptr<> reset
    c++模板库(简介)
    rockmongo用法
    随笔
    TEXT宏,TCHAR类型
    sprintf
    基于SOA的银行系统架构
    大纲6 信息化规划与管理
  • 原文地址:https://www.cnblogs.com/dsanying/p/11305911.html
Copyright © 2020-2023  润新知