zoukankan      html  css  js  c++  java
  • 1535:【例 1】数列操作

    【题目描述】

    给定nn个数列,规定有两种操作,一是修改某个元素,二是求子数列[a,b][a,b]的连续和。数列元素个数最多1010万个,询问操作最多1010万次。

    【输入】

    第一行22个整数n,mn,m(nn表示输入nn个数,mm表示mm操作)

    第二行nn个整数

    接下来mm行,每行三个数k,a,bk,a,b(k=0k=0,表示求子数列[a,ba,b]的连续和;k=1k=1,表示第aa个数加bb)。

    【输出】

    若干行,表示k=0k=0时,对应子数列[a,ba,b]连续和。

    【输入样例】

    10 5
    1 2 3 4 5 6 7 8 9 10
    1 1 5
    0 1 3
    0 4 8
    1 7 5
    0 4 8

    【输出样例】

    11
    30
    35

    #include<bits/stdc++.h>
    
    using namespace std;
    int n,m;
    const int N=1e5+10;
    int a[N];
    int lowbit(int x)
    {
        return x&(-x);
    }
    
    int sum(int x)
    {
        int ans=0;
        for(int i=x;i>0;i-=lowbit(i)){
            ans+=a[i];
        }
        return ans;
    }
    
    void updata(int x,int y)
    {
        for(int i=x;i<=n;i+=lowbit(i)){
            a[i]+=y;
        }
    }
    int main()
    {
        while(scanf("%d %d",&n,&m)==2){
            memset(a,0,sizeof(a));
            for(int i=1;i<=n;i++){
                int x;
                scanf("%d",&x);
                updata(i,x);
            }
            while(m--){
                int k,x,y;
                scanf("%d %d %d",&k,&x,&y);
                if(k==1){
                    updata(x,y);
                }
                else{
                    printf("%d
    ",sum(y)-sum(x-1));
                }
            }
    
        }
        return 0;
    }
  • 相关阅读:
    CodeForces 980 E The Number Games
    CodeForces 980 D Perfect Groups
    【动态规划】The Triangle
    【动态规划】矩形嵌套
    金块问题-排序-找最大最小
    猪八戒吃西瓜(wmelon)-排序-查找
    【贪心】取数游戏
    【贪心】排队接水
    桐桐的贸易--WA
    【贪心】智力大冲浪
  • 原文地址:https://www.cnblogs.com/chenchen-12/p/10179170.html
Copyright © 2011-2022 走看看