class MyCalendarThree {
public static void main(String[] args) {
MyCalendarThree myCalendarThree = new MyCalendarThree();
System.out.println( myCalendarThree.book(10,20) );
System.out.println(myCalendarThree.book(50,60));
System.out.println(myCalendarThree.book(10,40));
System.out.println(myCalendarThree.book(5,15));
System.out.println(myCalendarThree.book(5,10));
System.out.println(myCalendarThree.book(25,55));
}
class Seg{
int cl,cr;
Seg left,right;
int cnt;
int max; public Seg(int l,int r){
this.cl = l;
this.cr = r;
this.cnt = 0;
this.max = 0;
} public void pushdown(){
int mid = (cl+cr)/2;
if( this.left == null){
this.left = new Seg(cl,mid);
}
if(this.right == null){
this.right = new Seg(mid+1,cr);
}
if( this.cnt == 0){
return;
}
this.left.max += this.cnt;
this.right.max += this.cnt;
this.left.cnt += this.cnt;
this.right.cnt += this.cnt;
this.cnt = 0;
}
public void add(int l,int r){
if(cl == l &&cr == r){
this.cnt++;
this.max++;
return;
}
pushdown();
int mid = (cl+cr)/2;
if( r<=mid){
this.left.add(l,r);
}else{
if(l>mid){
this.right.add(l,r);
}else{
this.left.add(l,mid);
this.right.add(mid+1,r);
}
}
//pushup 啥也不做
pushup();
} public void pushup(){
this.max = Math.max(this.left.max,this.right.max);
} public int search(int l,int r){
if(cl ==l &&cr == r){
return this.max;
}
pushdown();
int mid = (cl+cr)/2;
int ans ;
if(r<=mid){
ans = this.left.search(l,r);
}else{
if(l>mid){
ans = this.right.search(l,r);
}else{
int val1 = this.left.search(l,mid);
int val2 = this.right.search(mid+1,r);
ans = Math.max(val1,val2);
}
}
pushup();
return ans;
}
}
Seg seg;
int k ;
public MyCalendarThree() {
seg = new Seg(0,1000000000);
k = 0;
} public int book(int start, int end) { seg.add(start,end-1);
int val = seg.search(start,end-1);
if(val > k){
k = val;
}
return k;
}
} /**
* Your MyCalendarThree object will be instantiated and called as such:
* MyCalendarThree obj = new MyCalendarThree();
* int param_1 = obj.book(start,end);
*/

【732. 我的日程安排表 III】线段树求解的更多相关文章

  1. Java实现 LeetCode 732 我的日程安排表 III(暴力 || 二叉树)

    732. 我的日程安排表 III 实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排. MyCalendar 有一个 book(int start, int end)方法 ...

  2. 【Codeforces717F】Heroes of Making Magic III 线段树 + 找规律

    F. Heroes of Making Magic III time limit per test:3 seconds memory limit per test:256 megabytes inpu ...

  3. HDU 5266 pog loves szh III (线段树+在线LCA转RMQ)

    题目地址:HDU 5266 这题用转RMQ求LCA的方法来做的很easy,仅仅须要找到l-r区间内的dfs序最大的和最小的就能够.那么用线段树或者RMQ维护一下区间最值就能够了.然后就是找dfs序最大 ...

  4. SPOJ GSS3 Can you answer these queries III ——线段树

    [题目分析] GSS1的基础上增加修改操作. 同理线段树即可,多写一个函数就好了. [代码] #include <cstdio> #include <cstring> #inc ...

  5. HDU 5266 pog loves szh III 线段树,lca

    Pog and Szh are playing games. Firstly Pog draw a tree on the paper. Here we define 1 as the root of ...

  6. SPOJ GSS3 Can you answer these queries III[线段树]

    SPOJ - GSS3 Can you answer these queries III Description You are given a sequence A of N (N <= 50 ...

  7. spoj 1557 GSS3 - Can you answer these queries III 线段树

    题目链接 给出n个数, 2种操作, 一种是将第x个数改为y, 第二种是询问区间[x,y]内的最大连续子区间. 开4个数组, 一个是区间和, 一个是区间最大值, 一个是后缀的最大值, 一个是前缀的最大值 ...

  8. SP1716 GSS3 - Can you answer these queries III 线段树

    问题描述 [LG-SP1716](https://www.luogu.org/problem/SP1716] 题解 GSS 系列的第三题,在第一题的基础上带单点修改. 第一题题解传送门 在第一题的基础 ...

  9. C#LeetCode刷题-线段树

    线段树篇 # 题名 刷题 通过率 难度 218 天际线问题   32.7% 困难 307 区域和检索 - 数组可修改   42.3% 中等 315 计算右侧小于当前元素的个数   31.9% 困难 4 ...

  10. poj 2528 Mayor's posters(线段树+离散化)

    /* poj 2528 Mayor's posters 线段树 + 离散化 离散化的理解: 给你一系列的正整数, 例如 1, 4 , 100, 1000000000, 如果利用线段树求解的话,很明显 ...

随机推荐

  1. ElasticSearch7.3学习(三十三)----kibana之Grok Dubugger

    在ElasticSearch7.3学习(三十二)----logstash三大插件(input.filter.output)及其综合示例中学到logstash使用filter插件进行数据清洗,grok是 ...

  2. uni-uadmin后台管理系统|uniapp+uView跨端后台框架实例

    基于uniapp+uview+uni-ui跨平台手机端后台管理系统UniappUAdmin. uniapp-uadmin 基于uni-app+uView+uniUI研发的跨端手机后台管理系统项目.全新 ...

  3. qwb2023落荒而逃版

    前言 qwb2023 .12.15 被打废了,N1决赛和qwb,有一个pwn可以做的但是已经在做misc看都不看--无语了. Pyjail ! It's myFILTER !!!|SOLVED|N1n ...

  4. 华为云GaussDB支撑农行超级网银业务,性能和稳定性备受认可

    数据库作为数据驱动业务创新和智慧银行建设的关键基础设施,在银行数字化变革中具有举足轻重的作用. 在金融科技发展和国家政策引领下,银行纷纷加快推进数字化转型时代,正在经历一场以科技引领.数据赋能.数字经 ...

  5. JS 判断对象属性是否存在,判断是否包含某个属性,是否为自身属性

    壹 ❀ 引 看过博主JS 疫情宅在家,学习不能停,七千字长文助你彻底弄懂原型与原型链这篇文章的同学应该知道,文中有专门介绍这个问题.那么为什么我要另起一篇再说一次呢?原因有两个,一是介绍原型与原型链的 ...

  6. NC15447 wyh的问题

    题目链接 题目 题目描述 我国现在能源消耗非常严重,现在政府有这样一个工作,每天早上都需要把一些路灯关掉,但是他们想让在关闭的过程中所消耗的能源是最少的,负责路灯关闭的工作人员以1m/s的速度进行行走 ...

  7. 云原生服务网格Istio:原理、实践、架构与源码解析

    华为云原生团队600多页的Istio实战精华总结,云原生服务网格Istio:原理.实践.架构与源码解析的电子书. 图书介绍 <云原生服务网格Istio:原理.实践.架构与源码解析>分为原理 ...

  8. Java设计模式-迭代器模式Iterator

    介绍 根据GoF的定义,迭代器模式提供了一种顺序访问聚合对象的元素而不暴露其底层表示的方法.这是一种行为设计模式. 顾名思义,迭代器有助于以定义的方式遍历对象集合,这对客户端应用程序很有用.在迭代期间 ...

  9. SpringBoot+Shiro+LayUI权限管理系统项目-2.业务模型分析

    1.项目模型介绍 1.1 部门表 部门编码.部门名称.上级部门 1.2 角色表 角色编码.角色名称 1.3 权限表 权限名称.权限标识.权限类型.上级权限.URL.权限图标.是否外部打开 1.4 用户 ...

  10. C++ 多线程的错误和如何避免(4)

    对共享的资源或者数据做加锁处理 在多线程的环境下,有时需要多个线程对同一个资源或者数据进行操作,如果没有加锁,容易出现未定义的行为. 比如: #include <iostream> #in ...