hdu 1166 敌兵布阵 (树状数组)

简介:

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1166

分析:第一次接触到线段树,上网看了一些资料,发现这道题可以用树状数组来代替线段树解决,似乎用起来更方便,于是乎就找了树状数组的资料来看,这里有一个是我从网上摘抄的树状数组的资料 树状数组 不是很齐全,但是初学者已经够用了。里边有基本的模板代码。

这道题是中文题目,题意很简单,就是典型的树状数组,线段树题目。

树状数组解法

复制代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 50005
using namespace std;

int a[MAXN],c[MAXN];

int N;

// 树状数组模板
int Low_bit(int x)
{
    return x & (-x);
}
void modify(int n,int value)
{
    while(n<=N)
    {
        c[n]+=value;
        n += Low_bit(n);
    }
}
int sum(int n)
{
    int sum=0;
    while(n>0)
    {
        sum+=c[n];
        n-=Low_bit(n);
    }
    return sum;
}

int query(int i,int j)
{
    return sum(j)-sum(i-1);
}

int main()
{
    int t,x,y;
    scanf("%d",&t);
    char order[10];
    for(int i=1;i<=t;i++)
    {
       printf("Case %d:\n",i);
       scanf("%d",&N);
       memset(a,0,sizeof(a));
       memset(c,0,sizeof(c));
       for(int j=1;j<=N;j++)
       {
           scanf("%d",&a[j]);
           modify(j,a[j]);
       }
       while(scanf("%s",order)&&strcmp(order,"End")!=0)
       {
            scanf("%d%d",&x,&y);
            if(strcmp(order,"Query")==0)
            printf("%d\n",query(x,y));
            else if(strcmp(order,"Add")==0)
            modify(x,y);
            else if(strcmp(order,"Sub")==0)
            modify(x,-y);
       }
    }
    return 0;
}

线段树解法:
复制代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 50005
using namespace std;

typedef struct Node
{
    int ld,rd;//左右边界
    struct Node *lc,*rc;//左右子树
    int value;
}Node,Tree;


int num[MAXN];
int N;

Tree *create(int a,int b)
{
    int mid;
    Node *node = (Node*)malloc(sizeof(Node));
    node->ld=a;
    node->rd=b;
    if(b-a>=1)
    {
        mid=(a+b)/2;
        node->lc=create(a,mid);
        node->rc=create(mid+1,b);
        node->value=node->lc->value+node->rc->value;
    }
    else node->value=num[node->ld];//也可以写成 node->value=a[node->rd];
    return node;
}

int query(Node *node,int x,int y)
{
    if(node->ld==x && node->rd==y)return node->value;
    int mid = (node->ld+node->rd)/2;
    if(mid>=y)return query(node->lc,x,y);
    else if(mid<x) return query(node->rc,x,y);
    else return query(node->lc,x,mid)+query(node->rc,mid+1,y);
}

void modify(Node *node,int x,int v)
{
    if(node->ld==node->rd)
    {
        node->value+=v;
        return;
    }
    if(node->lc->rd>=x)modify(node->lc,x,v);
    else if(node->rc->ld<=x)modify(node->rc,x,v);
    node->value = node->lc->value+node->rc->value;

}

int main()
{
    int t,x,y,value;
    Node *root;
    scanf("%d",&t);
    char order[10];
    for(int i=1;i<=t;i++)
    {
       printf("Case %d:\n",i);
       scanf("%d",&N);
       for(int j=1;j<=N;j++)
       scanf("%d",&num[j]);
       root = create(1,N);

       while(scanf("%s",order)&&strcmp(order,"End")!=0)
       {
            scanf("%d%d",&x,&y);
            if(strcmp(order,"Query")==0)
            printf("%d\n",query(root,x,y));
            else if(strcmp(order,"Add")==0)
            modify(root,x,y);
            else if(strcmp(order,"Sub")==0)
            modify(root,x,-y);
       }
    }
    return 0;
}
复制代码
 
 

 

 
复制代码
本文转自NewPanderKing51CTO博客,原文链接: http://www.cnblogs.com/newpanderking/archive/2012/11/17/2775235.html  ,如需转载请自行联系原作者
相关文章
|
消息中间件 Kubernetes 网络协议
K8S 性能优化 - OS sysctl 调优
K8S 性能优化 - OS sysctl 调优
|
SQL 缓存 NoSQL
高性能短链设计
高性能短链设计
|
5月前
|
机器学习/深度学习 人工智能 搜索推荐
AI与电商API的融合:开启智能推荐与精准营销新时代
人工智能(AI)与电商API的深度融合,正推动电商行业迈入智能推荐与精准营销的新时代。通过智能推荐系统、个性化服务、业务流程自动化等应用,AI助力电商平台提升运营效率、优化用户体验,并驱动商业模式创新。然而,数据安全、模型偏差和技术迭代等挑战亟待解决。未来,随着算法优化、自动化深化及跨平台支持加强,AI与电商API将为行业带来更多智能化、个性化的解决方案,开启电商发展的新篇章。
|
5月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
319 61
|
9月前
|
网络安全 SEO
如何简单建设一个网站?
在建站时,使用建站平台搭建简单,明确目标与定位、选择域名与主机域名、部署和运行将模板上传,完善网站信息,优化和维护网站后,考虑SEO和后续维护。
296 2
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
存储 安全 API
请解释Android的推送服务,如Firebase Cloud Messaging(FCM)。
Firebase Cloud Messaging (FCM)是Google的跨平台推送服务,支持Android、iOS和Web,提供实时、高效、安全的消息传递。它利用WebSocket实现低延迟通信,可发送纯文本、富媒体和自定义数据。FCM还支持离线消息存储和安全传输,并提供统计分析功能。要集成FCM,需在Android项目中添加Firebase库和权限设置,通过Firebase API管理消息。
1677 0
|
弹性计算 固态存储 数据可视化
APP阿里云服务器租用价格表
APP阿里云服务器租用价格表,2023年阿里云服务器租用费用,轻量应用服务器和云服务器ECS优惠价格表,阿里云轻量应用服务器2核2G3M带宽轻量服务器一年108元,2核4G4M带宽轻量服务器一年297.98元12个月,云服务器ECS包括通用算力型u1、ECS计算型c7、通用型g7和内存型r7均有活动
948 0
|
传感器 编解码 安全
什么? Macbook 也有 Touch ID ! 原来都是因为它... | 众筹星探
自从 iPhone 有了 Touch ID ,你会发现指纹识别真的是一种简单好用的东西。它能让你不需要依靠冗长复杂的密码就能用简单地指纹进行解锁,又快又安全。但你有没有想过如果也能在你的 PC 甚至是 Macbook 上也配上指纹识别,那会是怎样?
448 0
什么? Macbook 也有 Touch ID ! 原来都是因为它... | 众筹星探
|
存储 网络协议 算法
OSI 七层模型和TCP/IP模型及对应协议(详解)
在OSI七层模型中,处于不同层的中继系统具有不同的名称。 一个设备工作在哪一层,关键看它工作时利用哪一层的数据头部信息。网桥工作时,是以MAC头部来决定转发端口的,因此显然它是数据链路层的设备。具体说:物理层:网卡,网线,集线器,中继器,调制解调器 数据链路层:网桥,交换机
1205 1
OSI 七层模型和TCP/IP模型及对应协议(详解)