HDU 4027 线段树

海战(线段树)- HDU 4027         这一篇是典型的线段树算法,这个算法在日常工作中可能非常少见,因为可以被常规算法所取代,但是在问题达到一定数量级之后,常规算法是很难搞定类似问题的,可以说线段树是高级算法中非常低调的一种,也许在某些关键时刻能让你化险为夷。         线段树简单的说就是对一个序列每次从中间划分为2个区间,然后依次划分子区间。如图:         先看下维基百科的说明:        ... 阅读详情
/*******************************************************************************
   去年上海赛区网络赛线段树水题,首先虽然数据比较吓人,是64位int,但是开方不了几次,所以只要记录
那段区间的数时候都小于等于1就行了,0和1都不能再往下开方了,所以更新到底了~注意有x>y的情况。。。
*******************************************************************************/
#include <iostream>
#include <functional>
#include <algorithm>
#include <complex>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iomanip>
#include <sstream>
#include <utility>
#include <bitset>
#include <cctype>
#include <cstdio>
#include <limits>
#include <memory>
#include <string>
#include <vector>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
using namespace std;

#define LOWBIT(x) ( (x) & ( (x) ^ ( (x) - 1 ) ) )
#define CLR(x, k) memset((x), (k), sizeof(x))
#define CPY(t, s) memcpy((t), (s), sizeof(s))
#define SC(t, s) static_cast<t>(s)
#define LEN(s) static_cast<int>( strlen((s)) )
#define SZ(s) static_cast<int>( (s).size() )

typedef double LF;
typedef __int64 LL;		//VC
typedef unsigned __int64 ULL;

typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
typedef pair<double, double> PDD;

typedef vector<int> VI;
typedef vector<char> VC;
typedef vector<double> VF;
typedef vector<string> VS;

template <typename T>
T sqa(const T & x)
{
	return x * x;
}
template <typename T>
T gcd(T a, T b)
{
	if (!a || !b)
	{
		return max(a, b);
	}
	T t;
	while (t = a % b)
	{
		a = b;
		b = t;
	}
	return b;
};

const int INF_INT = 0x3f3f3f3f;
const LL INF_LL = 0x7fffffffffffffffLL;		//15f
const double oo = 10e9;
const double eps = 10e-7;
const double PI = acos(-1.0);

#define  ONLINE_JUDGE

const int MAXN = 100004;

int n, m;
LL arr[MAXN];
struct Node
{
	int left, right;
	LL sum;
	bool cover;
	int mid()
	{
		return (left + right) >> 1;
	}
	int len()
	{
		return right - left + 1;
	}
}st[MAXN << 2];

int inline ll(const int & x)
{
	return x << 1;
}
int inline rr(const int & x)
{
	return x << 1 | 1;
}
void updateST(int t)
{
	if (st[ ll(t) ].cover && st[ rr(t) ].cover)
	{
		st[t].cover = true;
		st[t].sum = st[ ll(t) ].sum + st[ rr(t) ].sum;
	}
	if (st[t].sum <= st[t].len())
	{
		st[t].cover = true;
	}
	return ;
}
void buildST(int l, int r, int t)
{
	st[t].left = l;
	st[t].right = r;
	st[t].cover = false;
	if (l == r)
	{
		st[t].sum = arr[l];
		st[t].cover = true;
		return ;
	}
	buildST(l, st[t].mid(), ll(t));
	buildST(st[t].mid() + 1, r, rr(t));
	updateST(t);
	return ;
}
void modifyST(int l, int r, int t)
{
	if (st[t].left == st[t].right)
	{
		st[t].sum = SC(int, floor(sqrt(st[t].sum + 0.0)));
		return ;
	}
	if (l <= st[t].left && st[t].right <= r)
	{
		if (st[t].sum <= st[t].len())
		{
			st[t].cover = true;
			return ;
		}
	}
	int mid = st[t].mid();
	if (r <= mid)
	{
		modifyST(l, r, ll(t));
	}
	else if (l > mid)
	{
		modifyST(l, r, rr(t));
	}
	else
	{
		modifyST(l, mid, ll(t));
		modifyST(mid + 1, r, rr(t));
	}
	updateST(t);
	return ;
}
LL queryST(int l, int r, int t)
{
	if (l <= st[t].left && st[t].right <= r)
	{
		if (st[t].cover)
		{
			return st[t].sum;
		}
	}
	int mid = st[t].mid();
	if (r <= mid)
	{
		return queryST(l, r, ll(t));
	}
	else if (l > mid)
	{
		return queryST(l, r, rr(t));
	}
	return queryST(l, mid, ll(t)) + queryST(mid + 1, r, rr(t));
}
void ace()
{
	int cas = 1;
	int op, low, high;
	while (scanf("%d", &n) != EOF)
	{
		for (int i = 1; i <= n; ++i)
		{
			scanf("%I64d", arr + i);
		}
		scanf("%d", &m);
		buildST(1, n, 1);
		printf("Case #%d:\n", cas++);
		while (m--)
		{
			scanf("%d %d %d", &op, &low, &high);
			if (low > high)
			{
				swap(low, high);
			}
			if (0 == op)
			{
				modifyST(low, high, 1);
			}
			else
			{
				printf("%I64d\n", queryST(low, high, 1));
			}
		}
		puts("");
	}
	return ;
}
int main()
{
#ifndef ONLINE_JUDGE
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
#endif
	ace();
	return 0;
}
/*******************************************************************************
Test Data...
10
1 2 3 4 5 6 7 8 9 10
5
0 1 10
1 1 10
1 1 5
0 5 8
1 4 8
*******************************************************************************/

基于STM32和K210的自动驾驶小车设计 自动驾驶技术正在迅速发展,成为了汽车行业和智能交通领域的热点之一。随着科技的发展,STM32和K210这两款芯片为自动驾驶小车提供了优秀的硬件支持。本文我们将学习如何使用STM32和K210打造一个简单的自动驾驶小车。提示:以下是本篇文章正文内容,下面案例可供参考通过这篇文章,掌握了如何使用STM32和K210构建一个简单的自动驾驶小车。通过了解基本的电路设计,并编写了STM32和K210的代码。通过这个例子,可以更好地理解如何在嵌入式系统中使用STM32和K210,以及如何实现自动驾驶小车的简单功能。 阅读详情

相关推荐

从寄存器到驱动:深入解读RFSoC RF-ADC阈值与校准API的底层逻辑

本文深入解析Xilinx RFSoC中RF-ADC的阈值检测与校准API的底层逻辑,涵盖寄存器映射、驱动实现及Gen3增强功能。通过详细代码示例和寄存器操作流程,揭示如何精准控制信号阈值检测与校准时序,提升系统稳定性与性能。特别探讨RF数据转换器在无线通信和雷达信号处理中的关键应用。

weixin_30552811的博客 687

hdu4027题解——线段树

hdu4027题解——线段树 题意: n个数,m次询问: 0 l r :将[l, r]内的数取根号并向下取整。 1 l r :输出[l, r]区间和。 思路:线段树,维护区间和。 坑点:l 可能会大于 r,需要剪枝,否则直接TLE,当值为1时不需要再取根号了,剪枝后500ms左右。 #include <bits/stdc++.h> using namespace std; ty...

D_Bamboo_的博客 344

MacOS下微信小程序源码提取与逆向实战:从找到.wxapkg到完整还原

本文详细介绍了在MacOS系统下进行微信小程序源码提取与逆向分析的完整实战流程。从定位沙盒机制中的.wxapkg缓存文件,到搭建Node.js环境与配置wxappUnpacker工具链,再到执行核心反编译命令并处理分包等复杂情况,提供了清晰的操作步骤。文章还汇总了Node版本、依赖缺失、文件乱码等常见问题的解决方案,旨在帮助开发者、安全研究人员高效完成小程序安全审计与学习。

weixin_29246195的博客 1603

HDU-4027 线段树

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4027 题目大意: 给你一个初始序列a[i],然后有两个操作,一个是询问区间的和,一个是将区间里的每一个数变为原来的平方根,向下取整。操作数<=100000 思路 给定的数初始最大为\(2^{63}\),那么我们最多取6次平方根就可以将其变为1,变成1之后不管怎么取都是1,所以考虑使用线段树维护一...

lalala445566的博客 200

IEC61850 通信协议测试验证实战指南:从理论到实践

本文提供了一份全面的IEC61850通信协议测试验证实战指南,强调测试必须从理论走向工程实践。文章详细讲解了如何搭建测试环境,并深入剖析了MMS、GOOSE、SV三大核心协议的实战测试方法,旨在帮助工程师通过系统化的测试验证,确保电力自动化设备的互操作性与通信可靠性。

weixin_29204121的博客 171

利用PV操作控制进程的并发进行---经典题解

前趋图 先理清楚前趋图中的逻辑关系:P1没有前驱,P2的前驱是P1,P3的前驱是P1、P2,P4的前驱是P2,P5的前驱是P3、P4。 前驱就是指只有在前驱进程完成后,该进程才能开始执行。由图可知,这里进程之间有6条有向弧,分别表示为P1→P2,P1→P3,P2→P3,P2→P4,P3→P5,P4→P5, 各个进程间的逻辑关系,那么我们需要设定6个信号量(S1、S2、S3、S4、S5、S6),利用PV操作来控制这些过程。 对于第一个空,P1执行完成之后,需要通知P2、P3可以开始,此处需要V(S

Yan Ka Kue的博客 6137

HDU-4027(线段树)

HDU - 4027 The 36th ACM/ICPC Asia Regional Shanghai Site 题目描述思路代码 题目链接:hdu-4027. 题目描述 一个长度为 nnn 的整数序列 a1,a2,...ana_{1},a_{2},...a_{n}a1​,a2​,...an​. 有mmm个操作,每个操作为 si,li,ris_{i}, l_{i},r_{i}si​,li​,ri...

Neromy 896

具身智能中的运动控制如何入门?

本文提出计算机视觉(CV)与强化学习(RL)结合的机器人运动控制学习路径。强调工程实践导向,建议采用"算法-机器人-工程"三阶段学习法:基础阶段掌握RL核心算法(PPO/SAC)和机器人动力学;进阶阶段聚焦Sim2Real技术(域随机化、模仿学习)和仿真环境搭建;深耕阶段结合CV优势开发视觉闭环控制等创新方向。特别指出应避免纯理论学习,提倡"最小知识原则"的实践模式,通过具体项目(如四足机器人控制)串联知识体系。推荐以《现代机器人学》等工具书为参考,配合开源框架(Pi

CyberSoma的博客 321

HDU-4027-Can you answer these queries?(暴力线段树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4027 题目大意:n个数,两种操作,0.将[l,r]内的所有数开平方(四舍五入取ll),1.求[l,r]内的sum 思路:线段树板子,首先需要更新到最下面,1开平方还是1,所以一个数最多更新64次,然后记录一下是否需要开平发即可。 ACCode: #include<stdlib.h&gt...

永远鲜红の幼月的博客 324

有限元之有限元空间的构造

主要介绍有限元的空间构造方法。

欢迎各位大佬光临“寒舍”!请多多指点,共同进步! 762

电脑技巧:Hyper-V安装UOS操作系统图文教程

今天给大家分享微软官方Hyper-v虚拟机管理软件安装UOS操作系统图文教程,感兴趣的朋友也可以下载试一试,当然有啥问题也可以互相沟通交流!

IT技术分享社区 4707

Can you answer these queries? HDU 4027 线段树

Can you answer these queries? HDU 4027 线段树 题意 是说有从1到编号的船,每个船都有自己战斗值,然后我方有一个秘密武器,可以使得从一段编号内的船的战斗值变为原来值开根号下的值。有两种操作,第一种就是上面描述的那种,第二种就是询问某个区间内的船的战斗值的总和。 解题思路 使用线段树就不用多说了,关键是如果不优化的话会超时,因为每次修改都是需要递归...

weixin_30715523的博客 175

YOLOv11改进缝合FasterBlock | 一种新型轻量化卷积结构C3k2的设计与实证:兼顾精度与速度的改进方法(附代码)

YOLO系列一直是目标检测领域的明星算法,凭借其实时性和准确性在众多应用中占据一席之地。随着YOLO版本的不断迭代,网络架构逐渐变得更为复杂,尤其是在卷积模块的设计上。本文将介绍如何利用FasterNet的FasterBlock创新,并通过二次创新C3k2提出一种全新的卷积结构。该结构旨在提高YOLOv11的计算效率和准确性,特别是在视觉任务中的表现。我们的创新在保证高精度的前提下,有效降低了计算量和内存需求,特别适合在资源受限的设备上运行。

一键难忘的博客 907

Can you answer these queries?( HDU - 4027,线段树 + 细节)

一.题目链接: HDU-4027 二.题目大意: n 个数. 有两种操作. 0 X Y:将区间 [X, Y] 的数开方(向下取整) 1 X Y:查询区间 [X, Y] 的和. 三.分析: 直接线段树单点更新会 TLE,由于根号 7 次后向下取整为 1. 所以只需要记录每段区间被更新过的次数. 注意:所给的 X,Y 大小关系不确定因为这里 WA 了三天啊啊啊啊啊啊 555....

The___Flash的博客 288

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

hdu 4027(线段树区间开方求和)

本来很早就做了这道题的,但是今天突然发现了. 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4027 解法:首先这道题的数据就告诉我们只能用线段树,但区间操作似乎很蛋疼,我当时想的是用lazy标记记录这段区间要开方几次,等query时在统一进行单点更新,然后…….我就T了,如果update一次query一次,我的lazy标记便并卵了,所以我们需要想更

chen20000804的博客 1973

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

HDU - 4027 Can you answer these queries? (线段树)

题目传送门:HDU - 4027 Can you answer these queries? 题目大意: 存在n艘敌军战舰,每艘战舰都有能量值,我军存在一种秘密武器,每次能够将在该区间内的所 有战舰的能量值开方,现在指挥官想要知道武器的效果,需要你告诉他该区间内敌军战舰的能 量值之和 分析: 该题对区间进行操作,显然是用线段树。两个操作分别是对区间进行开方和区间求和,对区间中战舰的能...

weixin_34166472的博客 79

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

hdu 4027 Can you answer these queries?(线段树)

题目大意:hdu 4027 Can you answer these queries? 题目大意:给定一个长度为N的序列,Q次操作,0 l r:将区间l r之间的数开根;1 l r:查询l r之间数的和。 解题思路:这题看上去是一道线段树,其实它就是一道线段树,只不过不用想的太复杂,因为开根的趋近1的速度非常快,所以每个节点只要标记区间内元素是否相同即可。复杂度妥妥的。 #inclu

不慌不忙、不急不躁 1209

HDU 4027(线段树)

HDU4027 题意:操作指令为0时,对区间[x,y]之间的数字进行开平方;指令为1的时候,对区间[x,y]之间的数字求和并输出; 思路:线段树处理就OK了,但是64位内的数最多开8次平方就为1了(开始不信,试了试之后orz.......),所以在开平方的时候加一下限制条件使开平方操作提前结束没必要的操作就可以了,不然会超时。 代码中的这句:en - st + 1 == evil[rt]表示...

weixin_30607659的博客 79

hdu-4027线段树练习

title: hdu-4027线段树练习 date: 2018-10-10 18:07:11 tags: acm 算法 刷题 categories: ACM-线段树 # 概述 这道线段树的题可以说是我这一段时间复习线段树后第一次认认真真的做的第一道线段树的题了吧,,,, 然后,,,看似很简单的题翻车了,,,,QAQ # 题意和分析 题意大概就是给你一些数,,然后对[l , r]这个区间里的...

weixin_30869099的博客 144

HDU4027 Can you answer these queries?【线段树】

Can you answer these queries? Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 23332    Accepted Submission(s): 5550   Problem Description A ...

海岛Blog 969

HDU4027线段树

此题有坑

dreambyday 413

【线段树】HDU - 4027 Can you answer these queries?

【题目】http://acm.hdu.edu.cn/showproblem.php?pid=4027 【题意】 【思路】 【代码】 #include&lt;bits/stdc++.h&gt; using namespace std; long long n; long long arr[100005]; long long Tree[800005]; void create(long...

swqeaaa的博客 139

HDU - 4027 Can you answer these queries? (线段树 区间更新 区间查询)

HDU - 4027  http://acm.hdu.edu.cn/showproblem.php?pid=4027 题意:更新的时候把要求区间内的值都更新为自己开根号,查询时查询区间和。 思路:  感觉自己有个不好的习惯,有题目没思路时老是容易去看题解或是discuss,这个习惯真的要改一下。 这个题由于是根号,所以必须得更新到点,然后会发现,每次开根号一个数会很快变成1,这时再对这段区间

shinimashzi 234

[HDU 4027] Can you answer these queries? (线段树+区间开方)

HDU - 4027 给定一个长度为 N 的数列,有M个操作,操作分两种 一是让指定区间每个数都开方,二是询问区间的和 由于每个数都在LL范围内,所以实际上每个数开方的次数不会很多 用线段树维护区间和,开方就暴力到根,然后逐个开方 当发现区间全部都是 1的时候就直接return坑点: 所有数都大于 0 可能出现 l>r的情况,这时候要 swap(l,r) 每个case最后还要加一个换行

MisDeer's blog 455

hdu4027 Can you answer these queries?(线段树)

hdu4027#include &lt;bits/stdc++.h&gt; using namespace std; typedef long long llt; struct Tree { int l,r; llt sum; }b[100000*4+1024]; void build(int l,int r,int i) { b[i].l=l; b[i].r=r; if(l==r){...

L_Aster的专栏 254

hdu 4027 Can you answer these queries? 线段树

 hdu 4027 Can you answer these queries?A lot of battleships of evil are arranged in a line before the battle. Our commander decides to use our secret weapon to eliminate the battleships. Each of the b...

GYH0730的博客 620
上一篇: HDU 4034 图论 Floyd
下一篇: HDU 4049 状态压缩DP
codeforces_sphinx
博客等级 码龄15年 32粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值