首页 > 其他分享 >ST表模板

ST表模板

时间:2024-09-21 17:35:37浏览次数:8  
标签:const int len ST func type 模板

template <typename T>
class SparseTable {
  using VT = vector<T>;
  using VVT = vector<VT>;
  using func_type = function<T(const T &, const T &)>;

  VVT ST;

  static T default_func(const T &t1, const T &t2) { return max(t1, t2); }

  func_type op;

 public:
  SparseTable(const vector<T> &v, func_type _func = default_func) {
    op = _func;
    int len = v.size(), l1 = ceil(log2(len)) + 1;
    ST.assign(len, VT(l1, 0));
    for (int i = 0; i < len; ++i) {
      ST[i][0] = v[i];
    }
    for (int j = 1; j < l1; ++j) {
      int pj = (1 << (j - 1));
      for (int i = 0; i + pj < len; ++i) {
        ST[i][j] = op(ST[i][j - 1], ST[i + (1 << (j - 1))][j - 1]);
      }
    }
  }

  T query(int l, int r) {
    int lt = r - l + 1;
    int q = floor(log2(lt));
    return op(ST[l][q], ST[r - (1 << q) + 1][q]);
  }
};

可以把这段代码理解成一个结构体,名字叫SparseTable。具有query成员函数。

标签:const,int,len,ST,func,type,模板
From: https://www.cnblogs.com/mcr130102/p/18424287

相关文章

  • 傻瓜式建站工具不能错过的主题网站模板
    傻瓜式建站以其简单易用、快速上手和个性化定制等特点,为不懂代码、程序的人搭建美观实用的网站提供了极大的便利。使用户无需具备专业的前端开发知识,也不需要雇佣专业的网站开发人员,即可快速搭建一个符合自己需求的网站。什么是傻瓜式建站?傻瓜式建站,也被称为自助建站系统,是一......
  • 【服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里
    文章目录一、阿里云OSS对象存储服务介绍二、服务开通与使用准备1、准备工作2、开通OSS云服务(新用户免费使用三个月)3、创建存储空间bucket4、创建并保存Accesskey5、配置访问凭证AK&SK(系统环境变量)三、阿里云OSS使用步骤1、导入依赖坐标2、文件上传Demo快速入门3、阿里......
  • 什么是 Vitest?为什么要使用它?
    嘿,开发者同事!?你准备好进入vitest的世界了吗?如果您是测试新手或者一直在使用其他测试框架,请不要担心。我们将一起探索vitest,在本文结束时,您会很高兴尝试一下!什么是维泰斯特?vitest就像你的代码的超级英雄。这是一个由vite提供支持的超快单元测试框架。但这对你来说意味......
  • 了解 Javascript 中的 POST 请求
    functionnewPlayer(newForm){fetch("http://localhost:3000/Players",{method:"POST",headers:{'Content-Type':'application/json'},body:JSON.stringify(newForm)}).then(resp=&g......
  • 为什么 Streams API 改变了 Web 开发者的游戏规则
    我们首先解释一下数据是如何通过网络发送的。它不是作为单个连续流发送的;相反,它被分成更小的块。在接收端,消费者或应用程序负责在收到所有数据后以正确的顺序和格式重新组装这些块。对于图像、视频和其他相对较大的数据类型,此过程会自动发生。因此streamsapi提供的是一种无需等......
  • AI绘画实操 Stable Diffusion 到底怎么玩儿,新手必看的AI绘画入门安装使用教程
    大家好,我是灵魂画师向阳2024年,是AI绘画技术飞速发展的一年,各种AI绘画工具层出不穷,为了让大家在了解和学习AI绘画的过程中少走弯路,今天我将详细介绍目前世界上使用用户最多,社区最大,生态最丰富的免费图像生成模型——StableDiffusion,并为你提供详细的安装教程,让你轻松踏入AI......
  • useSyncExternalStoreExports 状态源码解释
    在本文中,我们将了解zustand如何在其[源代码]中使用usesyncexternalstoreexports。usesyncexternalstoreexports是从use-sync-external-store/shim/with-selector导入的。use-sync-external-store是react.usesyncexternalstore的向后兼容垫片,可与任何支持hooks的react......
  • fastadmin: 避免引入页面同名js
    一,单个view中:写到方法最后fetch操作之前://列出所有新房publicfunctionlist(){...$config=$this->view->config;$config['jsname']='';$this->assign('config',$config);......
  • TestNG 与 JUnit:哪种 Java 测试框架适合您?
    测试框架是确保软件质量的重要工具,在Java生态系统中,TestNG和JUnit是最流行的两个选项。虽然这两个框架都有一个共同的目标——让测试变得更容易——但它们提供了不同的特性和功能来满足不同的测试需求。在这篇博文中,我们将深入探讨TestNG与JUnit之间的详细比较,帮助您确定......
  • Assembly.CreateInstance 方法和Activator.CreateInstance 方法(C#)
    1.Assembly.CreateInstance从程序集中查找某个类型,然后使用系统激活器创建它的实例,有以下三种方式实现:CreateInstance(String)使用区分大小写的搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。CreateInstance(String,Boolean)使用可选的区分大小写......