zoukankan      html  css  js  c++  java
  • bzoj3212 pku3468 A Simple Problem with Integers

    一个有初值的数列、区间加、区间查

    用线段树直接水过

    然而并没有1A,主要是做题太快没看规模结果没注意线段树要用longlong建

    卧槽怎么可以这么坑爹,害得我看见wa心慌了,还以为连线段树都要跪

    一开始在写下传(MDZZ)然后发现没什么操作就删了

     1 #include <cstdio>
     2 #include <iostream>
     3 #define mid (l+r)/2
     4 long long t[400001],tr[400001];
     5 int n,m;
     6 void add(int now,int l,int r,int x,int y)
     7 {
     8     t[now]+=y;
     9     if(l==r)
    10         return;
    11     if(x<=mid)
    12         add(now*2,l,mid,x,y);
    13     else
    14         add(now*2+1,mid+1,r,x,y);
    15 }
    16 void plus(int now,int l,int r,int x,int y,int z)
    17 {
    18     if(l==x && r==y)
    19     {
    20         tr[now]+=z;
    21         return;
    22     }
    23     if(x<=mid)
    24         plus(now*2,l,mid,x,std::min(y,mid),z);
    25     if(y>mid)
    26         plus(now*2+1,mid+1,r,std::max(x,mid+1),y,z);
    27     t[now]=t[now*2]+tr[now*2]*(mid-l+1)+t[now*2+1]+tr[now*2+1]*(r-mid);
    28 }
    29 long long que(int now,int l,int r,int x,int y)
    30 {
    31     if(l==x && r==y)
    32         return t[now]+tr[now]*(r-l+1);
    33     long long sum=(y-x+1)*tr[now];
    34     if(x<=mid)
    35         sum+=que(now*2,l,mid,x,std::min(y,mid));
    36     if(y>mid)
    37         sum+=que(now*2+1,mid+1,r,std::max(x,mid+1),y);
    38     return sum;
    39 }
    40 int main()
    41 {
    42     scanf("%d%d",&n,&m);
    43     for(int i=1;i<=n;i++)
    44     {
    45         int x;
    46         scanf("%d",&x);
    47         add(1,1,n,i,x);
    48     }
    49     for(int i=1;i<=m;i++)
    50     {
    51         char ch=getchar();
    52         for(;ch!='C' && ch!='Q';ch=getchar());
    53         if(ch=='C')
    54         {
    55             int x,y,z;
    56             scanf("%d%d%d",&x,&y,&z);
    57             plus(1,1,n,x,y,z);
    58         }
    59         else
    60         {
    61             int x,y;
    62             scanf("%d%d",&x,&y);
    63             printf("%lld
    ",que(1,1,n,x,y));
    64         }
    65     }
    66     return 0;
    67 } 
  • 相关阅读:
    vue3.0配置代理proxy 解决跨域问题
    1/26 机器人未来待解决问题
    每日一诵
    2020/11/14 关于股票的价格
    2020/11/14 再思股票价值
    11/2 股票价值
    我们为什么会越来越笨
    关于追女朋友
    关于早睡早起
    vue学习心得
  • 原文地址:https://www.cnblogs.com/wanglichao/p/5684426.html
Copyright © 2011-2022 走看看