HDU1166 敌兵布阵【线段树】题解,Java开发揭秘

对第i组数据,首先输出“Case i:”和回车,

对于每个Query询问,输出一个整数并回车,表示询问的段中的总人数,这个数保持在int以内。


Sample Input

1

10

1 2 3 4 5 6 7 8 9 10

Query 1 3

Add 3 6

Query 2 7

Sub 10 2

Add 6 3

Query 3 10

End 

Sample Output

Case 1:

6

33

59 

[](

)2.代码


单点更新

#define _CRT_SECURE_NO_WARNINGS 

#include<cstdio>

#include<iostream>

#include<string>

using namespace std;

#define lson l,m,rt<<1 宏定义更方便

#define rson m + 1,r,rt<<1|1

const int maxn = 55555;  //元素总个数

int sum[maxn << 2]; ///sum求和

void PushUP(int rt) ///更新父节点

{

	sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];

}

void build(int l,int r,int rt) //建树

{

	if (l == r)  ///到达叶节点

	{

        scanf("%d", &sum[rt]);

		return ;

	}

	int m = (l + r) >> 1;

	///左右递归

	build(lson);

	build(rson);

	///更新信息

	PushUP(rt);

}

///点修改

void update(int p, int add, int l, int r, int rt)//l,r表示当前节点区间,rt表示当前节点编号

{

	if (l == r) //到叶节点,修改

	{

		sum[rt] += add;

		return;

	}

	int m = (l + r) >> 1;

	//根据条件判断往左子树调用还是往右 

	if (p <= m) update(p, add, lson);

	else update(p, add, rson);

	PushUP(rt);//子节点更新了,所以本节点也需要更新信息

}

int query(int L, int R, int l, int r, int rt)//L,R表示操作区间,l,r表示当前节点区间,rt表示当前节点编号

{

	if (L <= l && r <= R)

	{

		return sum[rt];//在区间内,直接返回

	}

	int m = (l + r) >> 1;

	//累计答案

	int ans = 0;

	if (L <= m) ans += query(L, R, lson);

	if (R > m)  ans += query(L, R, rson);

	return ans;

}

int main()

{

	//memset(sum, 0, sizeof(sum));

	int T, n;

	scanf("%d",&T);

	for (int cas = 1;cas <= T; cas++)

	{

		printf("Case %d:\n", cas);

		scanf("%d", &n);

		build(1, n, 1); ///建立节点

	


### 最后

**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)**

### ActiveMQ消息中间件面试专题

*   什么是ActiveMQ?
*   ActiveMQ服务器宕机怎么办?
*   丢消息怎么办?
*   持久化消息非常慢怎么办?
*   消息的不均匀消费怎么办?
*   死信队列怎么办?
*   ActiveMQ中的消息重发时间间隔和重发次数吗?

**ActiveMQ消息中间件面试专题解析拓展:**

![BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM](https://img-blog.csdnimg.cn/img_convert/8efa9a2953ecb956b70cefd577a9129c.png)

* * *

# redis面试专题及答案

*   支持一致性哈希的客户端有哪些?
*   Redis与其他key-value存储有什么不同?
*   Redis的内存占用情况怎么样?
*   都有哪些办法可以降低Redis的内存使用情况呢?
*   查看Redis使用情况及状态信息用什么命令?
*   Redis的内存用完了会发生什么?
*   Redis是单线程的,如何提高多核CPU的利用率?

![BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM](https://img-blog.csdnimg.cn/img_convert/b45eb8f2023a61c83f1e1c3143f1ba5a.png)

* * *

# **Spring面试专题及答案**

*   谈谈你对 Spring 的理解
*   Spring 有哪些优点?
*   Spring 中的设计模式
*   怎样开启注解装配以及常用注解
*   简单介绍下 Spring bean 的生命周期

**Spring面试答案解析拓展**

![BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM](https://img-blog.csdnimg.cn/img_convert/cb59884f4c4079976be33cc3bb2bcd67.png)

* * *

# 高并发多线程面试专题

*   现在有线程 T1、T2 和 T3。你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行?
*   Java 中新的 Lock 接口相对于同步代码块(synchronized block)有什么优势?如果让你实现一个高性能缓存,支持并发读取和单一写入,你如何保证数据完整性。
*   Java 中 wait 和 sleep 方法有什么区别?
*   如何在 Java 中实现一个阻塞队列?
*   如何在 Java 中编写代码解决生产者消费者问题?
*   写一段死锁代码。你在 Java 中如何解决死锁?

**高并发多线程面试解析与拓展**

![BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM](https://img-blog.csdnimg.cn/img_convert/be8acb44f45db0641d658317959d642c.png)

* * *

# jvm面试专题与解析

*   JVM 由哪些部分组成?
*   JVM 内存划分?
*   Java 的内存模型?
*   引用的分类?
*   GC什么时候开始?

**JVM面试专题解析与拓展!**

![BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM](https://img-blog.csdnimg.cn/img_convert/3f8cee2db0c7431645e37921121b2ea9.png)
 写一段死锁代码。你在 Java 中如何解决死锁?

**高并发多线程面试解析与拓展**

[外链图片转存中...(img-bjv1l4vm-1630292598911)]

* * *

# jvm面试专题与解析

*   JVM 由哪些部分组成?
*   JVM 内存划分?
*   Java 的内存模型?
*   引用的分类?
*   GC什么时候开始?

**JVM面试专题解析与拓展!**

[外链图片转存中...(img-LH0Iwh8H-1630292598913)]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值