zoukankan      html  css  js  c++  java
  • 统计和

    题目描述

    给定一个长度为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

    看见很多人那树状数组做,但我模拟为什么过了?

    由此可得:

    模 拟 大 法 好 ! ! !
    
    
    #include<cstdio>
    #include<iostream>
    using namespace std;
    
    int n,i,j,m;
    
    long long int a[100005];
    
    int main(){
        scanf("%d",&n);
        scanf("%d",&m);
        while(m--){
            char z;
            int b,c;
            long long ans=0;
            cin>>z;
            scanf("%d%d",&b,&c);
            if(z=='x'){
                a[b]+=c;
            }
            else{
                for(i=b;i<=c;i++){
                    ans+=a[i];
                }
                printf("%lld
    ",ans);
            }
        }
        return 0;
    }
  • 相关阅读:
    继承—泛型
    单例模式
    继承 4—Monkey
    继承 3—A B E
    继承 2—people
    继承 1—Mucic
    面向对象—汽车
    面向对象—封装—汽车
    Linux下查看CPU型号,内存大小,硬盘空间的命令
    redis源码——数据结构与对象
  • 原文地址:https://www.cnblogs.com/hrj1/p/11179015.html
Copyright © 2011-2022 走看看