首页 > 其他分享 >数据结构进阶题目

数据结构进阶题目

时间:2022-08-17 14:24:36浏览次数:70  
标签:题目 进阶 int tr mid 60 read -- 数据结构

\(CF498D Traffic Jams In the Land\)

\(Soltuion:\) 发现 \(\mathrm{lcm}(1, 2, 3, 4, 5, 6)=60\),把 \(t\) 在\(\mod 60\) 意义下进行不会影响结果的正确性。接下来继续考虑线段树,对于每个区间 \([l, r]\),再对于每个可能的时间\(\mod 60\) 意义下的结果,我们维护如果在达到 \(l\) 的时候 \(t\mod 60 = i\),那么达到 \(r + 1\) 需要花费多少时间。\(O(60)\) 的 \(pushup\)。\(O(n {\log} n×60)\)。

点击查看代码
const int N = 1e5 + 10;
#define ls u << 1
#define rs u << 1 | 1
struct node{ int l, r, f[61]; }tr[N << 2];
int n, m, a[N];

inline void pushup(int u){
    for(int i = 0; i <= 59; i ++) tr[u].f[i] = tr[rs].f[(i + tr[ls].f[i]) % 60] + tr[ls].f[i];
}
inline void build(int u, int l, int r){
    tr[u].l = l, tr[u].r = r;
    if(l == r){ for(int i = 59; i >= 0; i --){ tr[u].f[i] = 1 + (i % a[l] == 0); } return; }
    int mid = l + r >> 1; build(ls, l, mid), build(rs, mid + 1, r); pushup(u);
}
inline void modify(int u, int x, int c){
    if(tr[u].l == tr[u].r){ a[x] = c; for(int i = 59; i >= 0; i --) tr[u].f[i] = 1 + (i % a[x] == 0); return; }
    if(x <= tr[ls].r) modify(ls, x, c); else modify(rs, x, c); pushup(u);
}
inline int query(int u, int l, int r, int x){
    if(tr[u].l > r || tr[u].r < l) return 0;
    if(tr[u].l >= l && tr[u].r <= r){ return tr[u].f[x]; }
    int L = query(ls, l, r, x); return L + query(rs, l, r, (x + L) % 60);
}
signed main(){
    read(n); for(int i = 1; i <= n; i ++){ read(a[i]); } build(1, 1, n);
    read(m); while(m --){
        char op; cin >> op; if(op == 'C'){
            int x, c; read(x), read(c); modify(1, x, c);
        }else{
            int l, r; read(l), read(r); r --; print(query(1, l, r, 0)), puts("");
        }
    }
}

标签:题目,进阶,int,tr,mid,60,read,--,数据结构
From: https://www.cnblogs.com/William-Sg/p/16595032.html

相关文章

  • Redux进阶
    https://blog.csdn.net/weiguang102/article/details/121955438React-redux中的Provider和connectProvider提供器讲解Provider是一个提供器,只要使用了这个组件,组件里......
  • 集合之list、set及数据结构简述
    List接口和常用方法区别于collection方法,list接口方法只能list及其子接口能调用,collection、set等无法调用List接口是Collection接口的子接口List集合类中元素有序且......
  • 【数据结构与算法】线性表——顺序表的实现
    顺序表的实现C++代码使用了模板。使用的时候直接导入头文件即可。代码实现相关细节、解释都在注释里了。那么就直接上代码了。//MySeqList.h文件#ifndef__MYSEQLIS......
  • python数据结构学习整理-集合
    """集合的定义-无序的唯一对象集合-用大括号{}包围,对象相互之间使用逗号分隔-集合是动态的,可以随时添加或删除元素-集合是异构的,可以包含不同类型的数据"""集合的使......
  • 高效能团队的Java研发规范(进阶版)
    目前大部分团队是使用的阿里巴巴Java开发规范,不过在日常开发中难免遇到覆盖不到的场景,本文在阿里巴巴Java开发规范基础上,补充一些常用的规范,用于提升代码质量及增强代码可......
  • YbtOJ 「数据结构」第4章 线段树
    不想dp了怎么办?开个新坑吧。例题1.求区间和树状数组不香吗,28行解决(bushi所以懒得打线段树了。code#include<bits/stdc++.h>#defineintlonglongusingnamespac......
  • STL库常用数据结构用法
    介绍了map、vector、queue、set的使用。以及string与char【】的互相转换#include<iostream>#include<map>#include<set>#include<string>#include<unordered_map......
  • leetcode(14)矩阵搜索系列题目
    64.最小路径和动态规划classSolution:defminPathSum(self,grid:List[List[int]])->int:m,n=len(grid),len(grid[0])res=0......
  • 数据结构与算法【Java】04---递归
    前言数据data结构(structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码。要学习好数据结构就......
  • 函数式编程中的 Immutable 数据结构
    原视频链接:https://www.youtube.com/watch?v=Wo0qiGPSV-sbyAnjanaVakil@JSConf概述函数式编程避免了很多命令式和面向对象的编程的问题。在函数中,数据输入,......