HDU1166 敌兵布阵

hdu 1166 敌兵布阵 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9475 Accepted Submission(s): 40 阅读详情

传送门:点击打开链接

题意:N个数, 有两种操作,单点修改跟区间求和

分析:

线段树裸题,也是树状数组裸题。

手敲了一个线段树模板,已经非常精简了,希望看到的同学喜欢。

代码如下:

#include <cstdio>
using namespace std;

const int maxn = 50000+5;
int a[maxn];
int n;
struct node{
   int left,right;
   int sum;
};
struct Tree{
   node tr[maxn*4];
   #define lch(u) (u<<1)
   #define rch(u) (u<<1|1)
   #define Mid (tr[u].left+tr[u].right)>>1

   inline void push_up(int u) {
      tr[u].sum = tr[lch(u)].sum + tr[rch(u)].sum;
   }

   void build(int u,int l, int r){
       tr[u].left = l; tr[u].right = r;
       if (l == r) {
           tr[u].sum = a[l];
           return ;
       }
       int mid = Mid;
       build(lch(u),l,mid);
       build(rch(u),mid+1,r);
       push_up(u);
   }

   void add(int u, int pos, int val){
       tr[u].sum += val;
       if (tr[u].left == tr[u].right) return;
       int mid = Mid;
       if (pos<=mid) add(lch(u),pos,val);
       else add(rch(u),pos,val);
   }

   int query(int u, int l, int r){
      if (l<=tr[u].left && tr[u].right<=r) return tr[u].sum;
      int mid = Mid;
      int ans = 0;

      if (r<=mid) ans += query(lch(u),l,r);
      else if (l>mid) ans += query(rch(u),l,r);
      else {
          ans += query(lch(u),l,r);
          ans += query(rch(u),l,r);
      }

      return ans;
   }
}T;

int main(){
    int t;
    scanf("%d",&t);

    int kase = 0;
    while (t--){
        scanf("%d",&n);
        for (int i=1; i<=n; i++) scanf("%d",&a[i]);
        T.build(1,1,n);
        printf("Case %d:\n",++kase);

        char str[10];
        int x,y;
        while (scanf("%s",str)==1){
            if (str[0]=='E') break;
            scanf("%d %d",&x,&y);

            if (str[0]=='A') T.add(1,x,y);
            else if (str[0]=='S') T.add(1,x,-y);
            else {
                printf("%d\n",T.query(1,x,y));
            }
        }
    }
    return 0;
}


再加一个树状数组AC的代码:

#include <cstdio>
#include <cstring>
using namespace std;

const int maxn = 50000+10;
int n;
int c[maxn];
int x,y;

inline int lowbit(int x) { return x&(-x); }

void add(int x, int val){
     while (x<=n) {
          c[x] += val;
          x += lowbit(x);
     }
}

int sum(int x){
    int ans = 0;
    while (x) {
        ans += c[x];
        x -= lowbit(x);
    }
    return ans;
}

int main(){
    int T;
    scanf("%d",&T);

    int kase = 0;
    while (T--){
        scanf("%d",&n);
        memset(c,0,sizeof(c));
        for (int i=1; i<=n; i++) {
             scanf("%d",&x);
             add(i,x);
        }
        printf("Case %d:\n",++kase);

        char str[10];
        while (scanf("%s",str)==1) {
            if (str[0]=='E') break;
            scanf("%d %d",&x,&y);

            if (str[0]=='A') add(x,y);
            else if (str[0]=='S') add(x,-y);
            else printf("%d\n",sum(y)-sum(x-1));
        }
    }
    return 0;
}

总结:如果在线段树和树状数组两者皆可的情况下使用树状数组会简单很多,代码复杂度比较低。

对于这题,二者的时间复杂度并无区别,实际运行线段树更优秀一些。


FoundationPose实战:从零部署到Demo运行全记录 本文详细记录了FoundationPose从零部署到Demo运行的全过程,包括Ubuntu环境配置、项目部署、依赖安装及常见问题解决方案。特别针对复现过程中的关键步骤如CUDA版本选择、Eigen3安装等提供了实用技巧,帮助开发者高效完成FoundationPose的部署与调试。 阅读详情

相关推荐

ENVI5.6 批量处理GF-2/GF-6/GF-7:从安装到融合的完整自动化流程

本文详细介绍了ENVI5.6环境下批量处理GF-2/GF-6/GF-7卫星数据的完整自动化流程,包括环境配置、工具安装、正射校正、图像融合等关键步骤。通过实战案例和优化技巧,帮助用户高效完成高分卫星影像处理,提升工作效率。特别针对GF-6和GF-7的特殊处理要点进行了深入解析。

weixin_42546392的博客 179

[HDU 1166] 敌兵布阵

[HDU 1166] 敌兵布阵 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 一个线段树区间求和的模板题了。 1 #include&lt;iostream&gt; 2 #include&lt;cstdio&gt; 3 #include&lt;cstring&gt...

Youpeng 285

什么是PCIe Relaxed Ordering

什么是PCIe上的Relaxed Ordering呢?直接翻译的话就是宽松排序。在理解这个东西之前,需要先了解下什么是PCIe的基本事务排序法则。

qq_42824983的博客 1509

敌兵布阵 HDU - 1166

敌兵布阵 HDU - 1166 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。 中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问

Are_you_ready的博客 323

Kerberos基础及KDC服务(理论知识)

kerberos基础理论讲解+KDC服务

Siobhan_Mxin的博客 9710

贝塞尔曲线在机器人路径平滑中的实战应用与优化

本文深入探讨了贝塞尔曲线算法在机器人路径平滑中的核心应用。通过对比G1CBS与G2CBS两种方法,详细阐述了如何实现从切线连续到曲率连续的平滑优化,以满足不同机器人对运动平稳性和效率的需求,并提供了完整的Python代码实现与关键参数调优指南。

weixin_29051811的博客 307

HDU-1166-敌兵布阵(树状数组)

HDU-1166-敌兵布阵(树状数组) http://acm.hdu.edu.cn/showproblem.php?pid=1166 这题之前用线段树做的,现在用树状数组 先简单说下树状数组吧 如上图所示 c1 = a1 c2 = a1 + a2 c3 = a3 c4 = a1 + a2 + a3 + a4 c5 = a5 c6 = a5 + a6 c7 = a7

菜鸟的程序人生 4814

WSL2+Ubuntu20.04纯root环境搭建指南:告别权限烦恼的终极方案

本文提供了一份详细的WSL2+Ubuntu20.04纯root环境搭建指南,旨在为本地开发与学习打造一个免去权限干扰、极致流畅的Linux子系统环境。通过启用WSL2、安装Ubuntu 20.04,并执行核心的root用户设置,开发者可以彻底告别频繁的sudo操作,提升在文件操作、容器调试和系统配置等方面的效率。

time3的博客 474

【线段树】HDU 1166 敌兵布阵

HDU 1166 敌兵布阵 #include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <cmath> #include <cstring> #include <string> #include <v...

L_X_ 188

含分布式电源的配电网三段式电流保护影响仿真研究

文章摘要 本文研究了分布式电源(DG)接入对配电网三段式电流保护的影响。通过在Matlab/Simulink平台搭建含同步发电机型DG的10kV配电网模型,设计了基于傅里叶算法的三段式电流保护模块(I段瞬时速断、II段限时速断、III段定时限过流)。研究分析了不同DG接入位置、容量及故障点对保护系统的影响机理。仿真结果表明,DG接入会改变故障电流特性,可能导致三种典型问题:保护范围扩大引起误动、保护灵敏度下降导致拒动,以及保护选择性丧失。该研究为含DG配电网的保护配置与整定提供了理论依据和仿真参考,对保障分

huanghm88的专栏 268

游戏战斗系统架构设计的演绎之路——从一坨意大利面条到一座精密钟表

摘要:游戏战斗系统架构设计的演进之路 本文系统梳理了游戏战斗系统从早期街机到现代3A大作的架构发展历程。70-80年代的街机游戏采用基础碰撞盒判定(如《街头霸王》);90年代实现动画融合与状态机架构(《最终幻想》《拳皇》);2000年后MMO引入服务器验证与同步技术(《魔兽世界》);3D时代融合物理引擎与智能AI(《GTA5》《只狼》);移动端则发展出轻量化架构与云端判定(《王者荣耀》)。现代战斗系统已实现模块化、数据驱动和热更新,未来趋势是AI裁判与云战斗系统。这一演进过程展现了技术与创意的完美结合,数百

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 800

【树状数组】HDU 1166 敌兵布阵

HDU 1166 敌兵布阵 题意:单点修改,区间查询 思路:树状数组模板题 思考:!!比线段树写的简短得多,但是忘了初始化树状数组QAQ…… #include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <cmath> #inclu...

L_X_ 183

机加工机器人系列编程:Fanuc M-710iC_(2).FanucM-710iC机器人的硬件配置

Fanuc M-710iC 机器人是一种广泛应用在汽车零部件制造行业中的工业机器人。它的本体结构设计紧凑、稳定,适用于多种加工任务。了解机器人的本体结构是进行编程和维护的基础。

zhubeibei168的博客 991

【每日一题(33)】 敌兵布阵 HDU-1166(线段树)

敌兵布阵 HDU-1166 前言 这是赵神5个月前布置的一道题目,VJ上显示第一次提交记录是2017-11-02 22:36:53 当时还年轻,以为这个题不难,直接就暴力求解,现在发现太年轻了,线段树+string都TLE 五个月前,对线段树最深的了解就是西工大的线段树专场了。 这是5个月的回忆,回想这5个月,还是荒废掉了。 题目描述 C国的死对头A...

Winsoul Blog 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

敌兵布阵 HDU 1166 线段树

敌兵布阵 HDU 1166 线段树 题意 这个题是用中文来描写的,很简单,没什么弯。 解题思路 这个题肯定就是用线段树来做了,不过当时想了一下可不可用差分来做,因为不熟练就还是用了线段树来做,几乎就是模板题了。 代码实现 #include<cstdio> #include<cstring> #include<algorithm> #include&lt...

weixin_30715523的博客 191

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

HDU1166敌兵布阵-线段树求和

HDU1166敌兵布阵-线段树求和 #include #include #include #include using namespace std; const int maxn = 200005*2; long long n,dat[2*maxn-1]; void init(int n_) { n = 1; while(n<n_)n*=2; for(int i

wxyfennie的博客 428

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

HDU1166敌兵布阵【线段树】

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1166 #include<iostream> #include<algorithm> #include<cstring> #include<string> #include<cstdio> using namespace std; const int INF = 0x3f3f3f3f; const int MAXN = 1e5 + 7; int T, n;

Tw_light的博客 232

【 HDU 1166】 敌兵布阵 树状数组从0到1

如果给你一个数组,让你求某个区间的和,你很自然会想到遍历一遍数组,复杂度是O(n),但是如果有多次询问呢,你也许会想到用前缀数组,通过O(n)的预处理,达到O(1)的查询,但是如果要更新某个元素的值呢,如果用前缀和的思想,每更新一个元素就会更新前缀数组,每次复杂度是O(n),如果有n次更改,复杂度为O(n^2)。有没有更快的呢,这时候树状数组就排上用场了,树状数组可以用来解决动态数组连续和的问题。...

天才小熊猫的博客 3277

敌兵布阵 HDU-1166

敌兵布阵 HDU-1166 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1166 -002 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某...

GG_Bond的博客 175

【完全版】线段树初学--HDU 1166 敌兵布阵

【完全版】线段树初学--HDU 1166 敌兵布阵 链接:click here~~ 题意: 第一行一个整数T,表示有T组数据。 每组数据第一行一个正整数N(N 接下来每行有一条命令,命令有4种形式: (1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30) (2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30); (3)Query

herongwei 的 BLOG 1228

hdu1166 敌兵布阵 线段树求和

import java.util.Scanner; class Node {// 结点类 int l, r; int sum; Node(int l, int r, int sum) { this.l = l; this.r = r; this.sum = sum; } } public class Main { static final int N = (int) (...

匿名攻城狮 742

hdu1166 敌兵布阵 线段树入门

渣渣做的线段树入门的题 题目地址:hdu1166 敌兵布阵 #include #include using namespace std; const int N = 50000+10; int a[N],p;//p是指向数组a的指针,每次新的数据记得初始化 int s_tree[3*N];//每个结点只存储工兵数量的和 void buit(int l,int r,int num){ if(l

#include 372

HDU1166 敌兵布阵 简单线段树 或树状数组

HDU1166敌兵布阵 最近线段树做的多了,简单线段树。树状数组就比较容易了。冲冲冲!!! 下面我用树状数组写的。 #include<iostream> #include<stdio.h> #include<cstring> #include<algorithm> #include<string> #include<...

an94460061的博客 240

敌兵布阵 HDU - 1166 (线段树单点修改)

敌兵布阵 HDU - 1166 题目链接:https://vjudge.net/problem/HDU-1166 题目: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握...

weixin_30633949的博客 230

HDU 1166 敌兵布阵(线段树&树状数组)

题目:HDU 1166 敌兵布阵 线段树模板题同时也是树状数组模板题 //Must so #include #define mem(a,x) memset(a,x,sizeof(a)) #define sqrt(n) sqrt((double)n) #define pow(a,b) pow((double)a,(int)b) #define inf 1<<29 #define NN 50004 using name

Must so 467

hdu 1166 敌兵布阵(线段树入门第一题)

题目:hdu1166 敌兵布阵 题意:有N个兵营,每个兵营都给出了人数ai(下标从1开始),有四种命令: (1)”Add i j",表示第i个营地增加j人。 (2)“Sub i j”,表示第i个营地减少j人。 (3)“Query i j",查询第i个营地到第j个营地的总人数。 (4)”End“,表示命令结束。 这题用线段树来做,比暴力优化很多,注意用scanf会比用cin效率提

若世界是黑暗,那我便是黎明。 弱者为何而战!? 599
上一篇: Codeforces 910A BFS
下一篇: HDU1754 I Hate it 线段树模板题
罗侯
博客等级 码龄10年 135粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值