hrbust简单操作

2024-05-12 21:08
文章标签 简单 操作 hrbust

本文主要是介绍hrbust简单操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

有一个空集合,集合内部的元素是一个 pair <A , B>。五种操作:

1、ADD新添一个元素 pair<A , B>保证元素的A 都不相等

Add A B

2、INC代表所有元素的AX异或的结果在[L , R]范围内的元素的 B都要加上 C

注意:这个操作是瞬间的,后来新加入的元素是不会被这个操作作用。

Inc X L R C

3、MAX询问问所有A X异或的结果 >= Y的元素,元素的B 最大的是多少。

Max X Y

4、SUM计算所有A X异或的结果在[L , R]范围内的元素,元素的 B和是多少。

Sum X L R

5、QUERY查询A值为X的元素中现在对应的B是多少。

Query X

Input

第一行是一个整数 T,以下 T组数据。

每组数据第一行是一个整数 N代表一共有 N个操作。 1 <= N <= 1e5。以下N行:
1
ADD 0 <= A , B <= 1e9保证所有元素的 A均不相等。
2
INC 0 <= X <= 1e9 , -1e8 <= C <= 1e8 , 0 <= L <= R <= 1e9
3
MAX 0 <= X , Y <= 1e9
4
SUM 0 <= X <= 1e9 , 0 <= L <= R <= 1e9
5
QUERY 0 <= X <= 1e9

Output

对于每次 MAX SUM Query询问返回所求答案

如果MAX,Query操作不存在所求,输出 "Not Existed!"

如果SUM操作不存在所求,输出 0.

Sample Input
1
12
Add 1 5
Add 2 3
Add 3 1
Max 3 1
Sum 1 2 100
Inc 3 2 100 5
Max 3 1
Sum 1 0 100
Query 1
Add 4 1
Sum 0 0 100
Query 5
Sample Output
5
4
10
14
10
15
Not Existed!
Hint

Add 1 5

Add 2 3

Add 3 1

Max 3 1

Sum 1 2 100

Inc 3 2 100 5

Max 3 1

Sum 1 0 100

Query 1

Add 4 1

Sum 0 0 100

Query 5

{}

{<1,5>}

{<1,5> , <2,3>}

{<1,5> , <2,3> , <3,1>}

<1,5> <2,3> 返回 5

<2,3> <3,1> 返回 3 + 1 = 4

{<1,10> , <2,3> , <3,1>}

<1,10> <2,3> 返回 10

<1,10> <2,3> <3,1> 返回 10 + 1 + 3 = 14

返回 10

{<1,10> , <2,3> , <3,1> , <4,1>} 注意新元素没有受到 Inc操作的影响

<1,10> <2,3> <3,1> <4,1> 返回 10 + 1 + 3 + 1 = 15

不存在


#include<stdio.h>
#include<math.h>
#include<string.h>
typedef long long LL;
#define N 100005
const LL MIN_INF=-(LL)pow(10.0,14.0);
struct TreeNode
{LL A,B,MaxA,MinA;int K,EXIST;TreeNode(){K=EXIST=0;MaxA=MIN_INF;MinA=-MIN_INF;}
}node[3*N];void Add(int k,LL &A,LL &B)
{if(node[k].EXIST==0){node[k].A=A; node[k].B=B;node[k].MaxA=node[k].MinA=A;node[k].EXIST=1;return ;}if(node[k].K>=0){Add(k*2,A,B);   node[k].K--;if(node[k].MaxA<node[k*2].MaxA) node[k].MaxA=node[k*2].MaxA;if(node[k].MinA>node[k*2].MinA) node[k].MinA=node[k*2].MinA;}else{Add(k*2+1,A,B);   node[k].K++;if(node[k].MaxA<node[k*2+1].MaxA) node[k].MaxA=node[k*2+1].MaxA;if(node[k].MinA>node[k*2+1].MinA) node[k].MinA=node[k*2+1].MinA;}
}
void Inc(int k,LL &X,LL &L,LL &R,LL &C)
{if(node[k].EXIST==0)return ;LL ans=node[k].A^X;if(ans>=L&&ans<=R) node[k].B+=C;Inc(k*2,X,L,R,C);Inc(k*2+1,X,L,R,C);
}
LL  Max(int k,LL &X,LL &Y)
{if(node[k].EXIST==0)return MIN_INF;LL max=MIN_INF, ans=node[k].A^X;if(ans>=Y&&max<node[k].B)max=node[k].B;ans=Max(k*2,X,Y);if(max<ans) max=ans;ans=Max(k*2+1,X,Y);if(max<ans) max=ans;return max;
}
LL Sum(int k,LL &X,LL &L, LL &R)
{if(node[k].EXIST==0)return 0;LL sum=0,ans=node[k].A^X;if(ans>=L&&ans<=R)sum+=node[k].B;sum+=Sum(k*2,X,L,R);sum+=Sum(k*2+1,X,L,R);return sum;
}
LL Query(int k,LL &X)
{if(node[k].EXIST==0)return MIN_INF;if(node[k].A==X)return node[k].B;if(node[k*2].MaxA>=X&&node[k*2].MinA<=X){LL B=Query(k*2,X);if(B!=MIN_INF)  return B;}if(node[k*2+1].MaxA>=X&&node[k*2+1].MinA<=X)return Query(k*2+1,X);return MIN_INF;
}
int main()
{int T,M;LL X,L,R,Y,C,A,B;char str[20];scanf("%d",&T);while(T--){scanf("%d",&M);while(M--){scanf("%s",str);if(strcmp(str,"Add")==0){scanf("%lld%lld",&A,&B);Add(1,A,B);}else if(strcmp(str,"Inc")==0){scanf("%lld%lld%lld%lld",&X,&L,&R,&C);Inc(1,X,L,R,C);}else if(strcmp(str,"Max")==0){scanf("%lld%lld",&X,&Y);LL max=Max(1,X,Y);if(max!=MIN_INF)printf("%lld\n",max);else printf("Not Existed!\n");}else if(strcmp(str,"Sum")==0){scanf("%lld%lld%lld",&X,&L,&R);printf("%lld\n",Sum(1,X,L,R));}else if(strcmp(str,"Query")==0){scanf("%lld",&X);LL B=Query(1,X);if(B!=MIN_INF)printf("%lld\n",B);else printf("Not Existed!\n");}}}
}




这篇关于hrbust简单操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983741

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce