• 洛谷——P2068 统计和


    https://www.luogu.org/problem/show?pid=2068#sub

    题目描述

    给定一个长度为n(n<=100000),初始值都为0的序列,x(x<=10000)次的修改某些位置上的数字,每次加上一个数,然后提出y (y<=10000)个问题,求每段区间的和。时间限制1秒。

    输入输出格式

    输入格式:

    第一行1个数,表示序列的长度n

    第二行1个数,表示操作的次数w

    后面依次是w行,分别表示加入和询问操作

    其中,加入用x表示,询问用y表示

    x的格式为"x a b" 表示在序列a的位置加上b

    y的格式为"y a b" 表示询问a到b区间的加和

    输出格式:

    每行一个数,分别是每次询问的结果

    输入输出样例

    输入样例#1:
    5
    4
    x 3 8
    y 1 3
    x 4 9
    y 3 4
    输出样例#1:
    8
    17

     1 #include <algorithm>
     2 #include <iostream>
     3 
     4 using namespace std;
     5 
     6 int n,w,a,b;
     7 char x_y;
     8 
     9 struct TypeNodeTree
    10 {
    11     int l,r,mid,dis,flag;
    12 }tree[10015*4];
    13 
    14 void tree_up(int now)
    15 {
    16     tree[now].dis=tree[now*2].dis+tree[now*2+1].dis;
    17     return ;
    18 } 
    19 
    20 void tree_build(int now,int l,int r)
    21 {
    22     tree[now].l=l; tree[now].r=r;
    23     tree[now].mid=(tree[now].l+tree[now].r)/2;
    24     if(l==r)
    25     {
    26         tree[now].dis=0;
    27         return ;
    28     }
    29     tree_build(now*2,l,tree[now].mid);
    30     tree_build(now*2+1,tree[now].mid+1,r);
    31     tree_up(now);
    32 }
    33 
    34 void tree_change(int now,int to,int add)
    35 {
    36     if(tree[now].l==tree[now].r)
    37     {
    38         tree[now].dis+=add;
    39         return ;
    40     }
    41     int mid=(tree[now].l+tree[now].r)/2;
    42     if(mid<to) tree_change(now*2+1,to,add);
    43     else          tree_change(now*2,to,add);
    44     tree_up(now);
    45 }
    46 
    47 int tree_query(int now,int l,int r)
    48 {
    49     if(tree[now].l==l&&tree[now].r==r)
    50         return tree[now].dis;
    51     int mid=(tree[now].l+tree[now].r)/2;
    52     if(l>mid) return tree_query(now*2+1,l,r);
    53     else if(r<=mid) return tree_query(now*2,l,r);
    54     else return tree_query(now*2,l,mid)+tree_query(now*2+1,mid+1,r);
    55 }
    56 
    57 int main()
    58 {
    59     cin>>n>>w;
    60     tree_build(1,1,n);
    61     for(int i=1;i<=w;i++)
    62     {
    63         cin>>x_y>>a>>b;
    64         if(x_y=='x') tree_change(1,a,b);
    65         else cout<<tree_query(1,a,b)<<endl;
    66     }
    67     return 0;
    68 }
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    PHP学习(字符串和变量)
    一个操作配置文件(Reg,ini,XML)的类
    Indy中判断邮件来源
    PHP学习(MSSQL数据库连接)
    辛辛苦苦,写了个INNO的安装脚本
    php连接sqlserver
    Sql Server 使用CTE实现递归查询
    使用序列化和反序列化机制深度复制对象
    ASP.NET中不常用的另类绑定方法<%$ %>
    google map事件监听
  • 原文地址:https://www.cnblogs.com/Shy-key/p/6749923.html
Copyright © 2020-2023  润新知