• 南阳理工oj 题目116 士兵杀敌(二)树状数组


    士兵杀敌(二)
    时间限制:1000 ms | 内存限制:65535 KB
    难度:5
    描述
    南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。

    小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。

    南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。

    输入
    只有一组测试数据
    第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示指令的条数。(1<M<100000)
    随后的一行是N个整数,ai表示第i号士兵杀敌数目。(0<=ai<=100)
    随后的M行每行是一条指令,这条指令包含了一个字符串和两个整数,首先是一个字符串,如果是字符串QUERY则表示南将军进行了查询操作,后面的两个整数m,n,表示查询的起始与终止士兵编号;如果是字符串ADD则后面跟的两个整数I,A(1<=I<=N,1<=A<=100),表示第I个士兵新增杀敌数为A.
    输出
    对于每次查询,输出一个整数R表示第m号士兵到第n号士兵的总杀敌数,每组输出占一行
    样例输入
    5 6
    1 2 3 4 5
    QUERY 1 3
    ADD 1 2
    QUERY 1 3
    ADD 2 3
    QUERY 1 2
    QUERY 1 5
    样例输出
    6
    8
    8
    20

    网上说用树状数组和线段树都能做。
    可是我都不会┭┮﹏┭┮
    先学会树状数组吧

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,m;
    int t[1000010];
    char tt[9];
    int lowbit(int x)
    {
        return x&(-x);
    }
    void initsum()//树状数组的初始化
    {
        for(int i=n;i>=1;i--)
        {
            int num=0;
            for(int j=i-lowbit(i)+1;j<=i;j++)
                num+=t[j];
            t[i]=num;
        }
    }
    int sum(int x)//求1到x的和
    {
        int num=0;
        while(x>0)
        {
            num+=t[x];
            x-=lowbit(x);
        }
        return num;
    }
    void add(int x,int y)//x添加y 后面树状数组随之改变
    {
        while(x<=n)
        {
            t[x]+=y;
            x+=lowbit(x);
        }
    }
    int main()
    {
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&t[i]);
            }
            initsum();
            int xx,yy;
            while(m--)
            {
                scanf("%s %d %d",&tt,&xx,&yy);
                if(tt[0]=='A')
                {
                    add(xx,yy);
                }
                else
                {
                    printf("%d
    ",sum(yy)-sum(xx-1));
                }
            }
        }
        return 0;
    }
    
  • 相关阅读:
    五个Metro UI 风格的网页设计
    cocos2dx学习资料(转)
    Python性能鸡汤
    7款很棒的 HTML5 视频播放器
    优秀的后台管理界面设计案例分享
    Task的理解(转)
    超棒的20款javascript工具提示条(tooltips)类库(转)
    Xcode 证书生成、设置、应用(转)
    分享17个漂亮的电子商务网站(转)
    强烈免费25款商务logo设计模板(转)
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7900099.html
Copyright © 2020-2023  润新知