hdu 4288 Coder(线段树)

VirtualBox增强功能安装全指南:从下载到配置复制粘贴功能 本文详细介绍了VirtualBox增强功能的完整安装与配置流程,重点解决了虚拟机与主机间复制粘贴、文件拖放等核心协作难题。通过分步指南和故障排查,帮助用户在不同操作系统(如Windows、Linux)中实现无缝集成,提升虚拟化工作效率与体验。 阅读详情


hdu 4288 Coder


此题表示有一定难度啊、、

首先线段树涉及到增点、删点如果没有办法规避,就只能利用伸展树等其他数据结构了

如果线段树要规避增点、删点的话那一般都要涉及离线操作,此题也是

也是看别人代码理解的思路吧

节点定义一个sum[5]、以及一个cnt表示该节点所代表区间内的数的个数

而怎么去理解sum[5]?

不得不佩服大神算法的巧妙

sum[5]保存的是相对于该节点左端点的MOD 5的值

虽然除最左的儿子节点外,其他节点保存的sum[i]的值并非相对0进行的MOD5操作,但巧妙的是可以在向上更新中用过获取左儿子节点中保存的数的个数一步一步将本节点转换成相对0的MOD5操作

即:

for(int i=0;i<5;i++)
t[p].sum[i]=t[lch].sum[i]+t[rch].sum[((i-t[lch].cnt)%5+5)%5];

在更新的时候只需要维护sum[i]和cnt的值就行了,直接查询t[1].sum[2]便是结果


#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<map>
using namespace std;
#define ll __int64
#define MAXN 100005
#define lch p<<1
#define rch p<<1|1
#define mid (t[p].l+t[p].r)>>1
struct node
{
	int l,r;
	ll sum[5];
	int cnt;
}t[MAXN<<2];
void construct(int l,int r,int p)
{
	t[p].l=l,t[p].r=r,t[p].cnt=0;
	memset(t[p].sum,0,sizeof(t[p].sum));
	if(l==r) return ;
	int m=mid;
	construct(l,m,lch);
	construct(m+1,r,rch);
}
void pushup(int p)
{
	t[p].cnt=t[lch].cnt+t[rch].cnt;
	for(int i=0;i<5;i++)
		t[p].sum[i]=t[lch].sum[i]+t[rch].sum[((i-t[lch].cnt)%5+5)%5];
}
void modify(int x,ll val,int p)
{
	if(t[p].l==t[p].r)
	{
		t[p].sum[0]+=val;
		t[p].cnt+=val<0?-1:1;
		return ;
	}
	int m=mid;
	if(x<=m) modify(x,val,lch);
	else modify(x,val,rch);
	pushup(p);
}
int op[MAXN],x[MAXN],xx[MAXN];
map<int,int> rec;
int main()
{
	char oop[5];
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		int i,j;
		for(i=0,j=0;i<n;i++)
		{
			scanf("%s",oop);
			if(oop[0]=='a'||oop[0]=='d')
			{
				op[i]=oop[0]=='a'?1:2;
				scanf("%d",&x[i]);
				xx[j++]=x[i];
			}
			else
				op[i]=3;
		}
		sort(xx,xx+j);
		int up=unique(xx,xx+j)-xx;
		construct(0,up-1,1);
		rec.clear();
		for(int i=0;i<up;i++)
			rec[xx[i]]=i;
		for(int i=0;i<n;i++)
		{
			if(op[i]==1)
				modify(rec[x[i]],(ll)x[i],1);
			else if(op[i]==2)
				modify(rec[x[i]],(ll)(-x[i]),1);
			else
				printf("%I64d\n",t[1].sum[2]);
		}
	}
	return 0;
}


图像紫边消除(depurple) 对图像紫边形成原因、消除方法进行了介绍。 阅读详情

相关推荐

基于Ultralytic实现多路摄像头目标检测

基于Ultralytic实现多路摄像头目标检测前面的文章分享了单路摄像头画面的YOLO目标检测,这篇文章主要分享一下多路摄像头画面的实时YOLO目标检测。测试环境在Windows系统下进行。

qq_57674776的博客 940

关于批处理命令!

一.简单批处理内部命令简介1.Echo 命令打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。语法echo [{on|off}] [message]Sample:@echo off / echo hello world在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体

技术点滴 3893

新手3dslicer手动肝脏切割及体积测量(详细图文)

刚接手软件的时候,我一直想用自动分割工具,试验了Med sam,依赖安装不了;试验了英伟达的AI,NvidiaAIAssis,传服务器根本没反应,所有只有用了手动切割。不要求所有层面勾画,但是最好是典型层面都勾画一下,特别是有毗邻脏器密度相近的层面。点击3D后可能三维窗口未显示,可以调整一下窗口大小,有可能显示在我们看见的范围之外。早就准备更新这篇了,由于懒癌发作,一直早葛优躺,今天刚好有点时间,就简单写下来。

linjianping513的博客 5926

HDU 4288 Coder (线段树)

Coder 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4288 题意:有三种类型的操作,(1)."add x",表示往集合里添加数x。(2).“del x”表示将集合中数x删除。(3).“sum”求出从小到大排列的集合中下标模5为3的数的和。集合中的数都是唯一的。 思路:这题巧妙的地方在于先离线输入,然后离散化。输入的数字按照从

SIOFive的专栏 1080

手把手教你用UNet实现轨道缺陷检测(附RSDDs数据集下载与完整代码)

本文详细介绍了如何使用UNet模型实现轨道缺陷检测,包括RSDDs数据集的下载与处理、UNet架构的改进与优化、训练策略设计以及模型部署的全流程。通过实战案例,展示了如何利用深度学习技术提升工业质检效率,特别适合从事工业缺陷检测和图像处理的开发者参考。

dapp9builder的博客 749

YOLOv8环境搭建+训练自己的数据详细项目

直接按照路径会有问题,找到自己 requirements.txt 文件路径,我这里是pip install -r D:\ultralytics-main\ultralytics-main\requirements.txt。首先去自己的anaconda的安装的envs(虚拟环境),在导航栏输入cmd,进入命令窗口。到官方网站下载yolo模型 ,下载好后解压,里面有个文件requirements.txt。然后安装ultralytics ,这是必须的。

m0_63172128的博客 2万+

hdu 4288 Coder (线段树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4288 题意:对一个集合,更确切地说是数组吧,第步有三种操作:1、添加一个数x,2、删除一个数x,3、询问数组中下标index对5取余为3的所有无素的和。 添加一个数时,保证集合中不含此数,同样删除时保证含有此数。 解析:这道题目需要维护5颗线段树,sum[ 5 ]分别表示区间内下

fire__ice的专栏 676

SpringBoot4.0+JDK25+GraalVM实战:云原生新纪元,微服务性能翻倍的落地指南

三者的组合不是偶然,而是“框架优化+JDK升级+虚拟机革新”的必然结果——SpringBoot4.0完善了对GraalVM原生镜像的支持,JDK25强化了云原生与AOT编译能力,GraalVM则提供了极致的启动速度和资源利用率,三者协同,刚好命中云原生微服务的核心痛点。SpringBoot4.0+JDK25+GraalVM的组合,不是简单的版本升级,而是云原生微服务的一次性能革命。

2601_94871597的博客 1141

HDU 4288 Coder 线段树||暴力

传送门:HDU4288 题意:维护一个队列,三种操作:add  x   将x加入队列(有序插入),del  x   将x从队列删除,  sum  输出队列中下标i%5==3的和。 这题当时在暑假是用线段树写的。。当然是对着题解。。现在对线段树还是一窍不通。。这次又做发现好像暴力也能过,心想这次终于不用看题解了吧。。没想到啊。。暴力怎么改怎么TLE,对着题解还改了好几遍。。最终跟题解写法差不多了

WA是一笔财富 312

Android oom_adj 更新原理(一)

通过之前的两篇博文《lmkd 机制详解》和《lmkd中adj score的算法剖析》中,根据计算出来的 min_score_adj 选择大于该值的 oom_adj 的进程进行 kill 处理。oom_adj 随着应用状态的不同其值也是伴随着变化的。本文将通过源码剖析 oom_adj 更新的原理。

私房菜 2653

Android 14.0 系统设置显示主菜单添加屏幕旋转菜单实现旋转屏幕功能

在14.0的系统rom定制化开发中,在对系统设置进行定制开发中,有产品需求要求增加 旋转屏幕功能的菜单,就是在点击旋转屏幕菜单后弹窗显示旋转0度,旋转 90度,旋转180度, 旋转270度针对不同分辨率的无重力感应的大屏设备的屏幕旋转功能的实现, 接下来就来分析实现这个功能

安卓兼职framework和app工程师的博客 1309

hdu 4288 Coder 线段树

//先将所有的操作离线,将读入的所有数按照从小到大排列,去除重复的点 //用线段树维护这个区间内的数读入的数目,用一个数组存入在这个区间内 //对5取余数分别为0,1,2,3,4的所有数之和 //更新的时候tree[v].sum[i] = tree[v #include #include #include #include using namespace std ; const

ijbuhv的专栏 785

SAP_MM/CO模块-超详细的CK11N/CK40N取值逻辑梳理(十几种业务场景,1.76W字)

本文主要讲述的是三个大的知识点,超详细,涉及到知识点比较多,并且串起来讲解,这也是我在网上搜不到相关资料才自己慢慢研究测试出来的,断断续续耗费了我一周多时间,相信只要你们认真看完,肯定会有所收获; 1、CK11N/CK40N成本发布功能中,系统前台的取数逻辑,涉及到多个采购信息记录、生产版本、货源清单、配额协议等对成本价发布的影响~~!! 2、CK11N与CK40N发布的成本价不一致的问题~~!! 3、如何处理外协加工物料的外协价与BOM组件成本取值不匹配的问题~~!!

风沙的博客 4080

Hdu4288_Coder(线段树)

题意: 题目中给了三个操作 1:add x 就是把x插进去 2:delete x 就是把x删除 3:sum 就是求下标%5=3的元素的和。 插入和删除最后都要保证数列有序。 思路: 线段树做法:每个节点维护两个值,一个是当前区间的数字个数cnt,另一个是sum[i],sum[i]就是区间内数的下标%5 = i的这些数的和(下标是指当前区间内的,不是整体区间)。 向上更新时,父亲的左区间的下标与左儿...

CY05627的博客 294

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WINCC7.3破解文件

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

HDU 4288 Coder(线段树+离线处理)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4288 维护一个序列an,有以下三种操作: 一、在序列中添加元素x 二、在序列中删除元素x 三、计算序列中下标i%5=3的元素和 在写解题报告之前先废话几句关于线段树的姿势问题: 之前一直习惯于结构体姿势的线段树,后来看了notonlysuccess的线段树总结,开始采用数组

To be excellent! 1212

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

HDU 4288 Coder 【线段树】

题目链接 segment tree, single-point update 题意 维护一个集合,这个集合可进行以下操作: + 向其中添加一个数(保证之前没有这个数) + 向其中删除一个数(保证集合中有这个数) + 求所有下标%5==3的数的和(从小到大排列) 完成给定的操作,返回sum的值 分析 求区间和问题,尝试使用线段树。然而是求的有步长的和,...

a18235146924的博客 124

HDU 4288 Coder(线段树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4288 题意:给出一个数列,开始这个数列是空的。有三种操作: (1)add x将x按照升序插入数列的适当位置; (2)del x将x从数列中删除; (3)sum,询问数列中模5等于3的位置的数之和。(数列的位置从1开始编号)   思路:这个题用vector直接暴力也行,但是还是线段树比较高效...

weixin_34368949的博客 138

HDU4288 Coder(离线+线段树)

Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4903    Accepted Submission(s): 1880 Problem Description   In mathematics and c

KeyboardPianist的博客 1097

HDU 4288 Coder(线段树)

题意: 给定三种操作   1. add x 向序列中添加x,添加之后序列还保持有序   2. del x 删除序列中值为x的元素   3. sum 求下边模5等于3的元素和 思路: 直接暴力也可以过,就是看暴力写的好不好了。用数组直接暴力可过。 暴力代码: #include <cstdio> #include <cstring> #in...

dizhuo0219的博客 199

hdu4288 Coder 线段树

Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3567    Accepted Submission(s): 1390 Problem Description   In mathematics and c

443

多颗线段树+间隔点组成的区间求和 hdu4288 coder

题意: hdu4288 有3种操作:1.往集合里加入元素 2.删除集合里的元素 3.对集合里下标模5等于3的元素求和 加入和删除元素就是线段树里的单点更新,但第三种操作就不那么显然了。由于需要求和的元素都是模5等于3的等间隔的点,当我们对一个节点进行更新的时候,它的左子结点的满足条件的下标在这个节点肯定也满足条件,但右子节点模5等于3的下标并不是这个节点的模5等于3的下标,因为当

hexiecs的技术专栏 683

A - Coder HDU - 4288——线段树

Think: 1知识点:预处理得到有序线段树结点对应关系进而逐渐建树 2题意:维护有序集合的插入操作/删除操作/求和操作vjudge题目链接以下为Accepted代码#include <cstdio> #include <cstring> #include <algorithm>using namespace std;typedef long long LL;const int N = 1e5

BlessingXRY的博客 390

HDU4288 Coder(线段树)

注意添加到集合中的数是升序的,先将数据读入,再离散化。 sum[rt][i]表示此节点的区域位置对5取模为i的数的和,删除一个数则右边的数循环左移一位,添加一个数则右边数循环右移一位,相当于循环左移4位,线段树与树状数组结合,树状数组确定位置。  le[rt]表示左移的位数,区间更新懒惰标记 #include <iostream> #incl...

Nobel7889的专栏 180

HDU 4288 Coder 线段树

Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2747    Accepted Submission(s): 1096 Problem Description   In mathematics a

poursoul 906

hdu-4288-Coder-线段树

感觉今天的状态有点不好。。。老是在小地方犯错。。。 简单的记录一下就好。 #include #include #include #include #include #include #include #include #pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; #define maxn

青竹梦 898
上一篇: poj 2886 Who Gets the Most Candies?(线段树、反素数)
下一篇: CF 19D Points(线段树+set)
yjCola
博客等级 码龄14年 4粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值