• 【HDU1166】敌兵布阵-单点修改和区间求和


    题目大意:一个长为N的数列A,对它进行操作:1.Add/Sub i j:将Ai增加/减去j。2.Query i j:询问Ai+...+Aj的值。对于每个询问,给出正确的答案。

    做法:一道入门题,用线段树和树状数组都能做,比较简单。

    因为树状数组编程复杂度比较低,所以这里只贴树状数组的代码:

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    int T,n,c[50010]={0};
    char op[10]={0};
    
    int lowbit(int i)
    {
      return i&(-i);
    }
    
    void add(int x,int a)
    {
      for(int i=x;i<=n;i+=lowbit(i))
        c[i]+=a;
    }
    
    int sum(int x)
    {
      int s=0;
      for(int i=x;i>0;i-=lowbit(i))
        s+=c[i];
      return s;
    }
    
    int query(int a,int b)
    {
      return sum(b)-sum(a-1);
    }
    
    int main()
    {
      scanf("%d",&T);
      for(int t=1;t<=T;t++)
      {
        scanf("%d
    ",&n);
    	memset(c,0,sizeof(c));
    	for(int i=1;i<=n;i++)
    	{
    	  int a;
    	  scanf("%d",&a);
    	  if (i==n) scanf("
    ");
    	  add(i,a);
    	}
    	printf("Case %d:
    ",t);
    	scanf("%s",op);
    	while(op[0]!='E')
    	{
    	  int a,b;
    	  scanf("%d %d
    ",&a,&b);
    	  if (op[0]=='A') add(a,b);
    	  if (op[0]=='S') add(a,-b);
    	  if (op[0]=='Q') printf("%d
    ",query(a,b));
    	  scanf("%s",op);
    	}
      }
      
      return 0;
    }
    



  • 相关阅读:
    mysql开发
    mysql的初始化配置及命令行选项
    纪念Vamai
    JXU1NDRBJXU0RTJBJXU1MjJCJXU1NDI3
    Java8简明学习之新时间日期API
    Java8简明学习之Lambda表达式
    Java8简明学习之接口默认方法
    Java8简明学习之Optional
    JVM类加载器及Java类的生命周期
    Java反射拾遗
  • 原文地址:https://www.cnblogs.com/Maxwei-wzj/p/9793996.html
Copyright © 2020-2023  润新知