zoukankan      html  css  js  c++  java
  • UVa12086 Potentiometers

    题目大意

    给定n个数,你的任务是实现如下两种操作:

    “S x y“ 把第x个数修改为y

    “M x y”计算第X个数到第Y个数之和

    题解

    这刚好是树状数组的功能,修改元素的值和求区间和

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #define MAXN 200005
    using namespace std;
    int n;
    int c[MAXN];
    int lowbit(int x)
    {
        return x&-x;
    }
    void add(int x,int d)
    {
        while(x<=n)
        {
            c[x]+=d;
            x+=lowbit(x);
        }
    }
    int sum(int x)
    {
        int ret=0;
        while(x>0)
        {
            ret+=c[x];
            x-=lowbit(x);
        }
        return ret;
    }
    int main(void)
    {
        int i,k,x,y,p,t;
        bool first_case=true;
        string s;
        p=0;
        while(scanf("%d",&n)&&n)
        {
            if (!first_case)
                cout << endl;
            first_case = false;
            printf("Case %d:\n",++p);
            memset(c,0,sizeof(c));
            for(i=1; i<=n; i++)
            {
                scanf("%d",&k);
                add(i,k);
            }
            while(cin>>s)
            {
                if(s=="END") break;
                if(s=="M")
                {
                    scanf("%d%d",&x,&y);
                    printf("%d\n",sum(y)-sum(x-1));
                }
                else
                {
                    scanf("%d%d",&x,&y);
                    t=sum(x)-sum(x-1);
                    add(x,y-t);
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    北航算法作业三
    水库抽样
    python命名空间
    我说
    Fn键
    windows批处理运行java程序
    Java Sound初探
    java.io.IOException: mark/reset not supported
    三层交换机对链路层数据帧的处理
    北航数值分析作业三
  • 原文地址:https://www.cnblogs.com/zjbztianya/p/3031367.html
Copyright © 2011-2022 走看看