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. webrtc终极版(题外话)辛苦写文章分享,竟然遇到喷子狂喷,写篇文章回怼下,顺便发表下面对喷子的处理方式

    webrtc终极版(题外话)辛苦写文章分享,竟然遇到喷子狂喷,写篇文章回怼下,顺便发表下面对喷子的处理方式 第一篇文章发过后,出人意料的是,收到了博客园某一位用户的狂喷[注:本系列文章会同步发布到cs ...

  2. go中的 4种 for循环

    package main import "fmt" func main() { // 第一种写法 for i := 1;i < 10; i++ { fmt.Println(& ...

  3. 罗克韦尔 FT View使用占位符(全局对象参数)来指定弹出窗口的显示名称

    罗克韦尔 FT View使用占位符(全局对象参数)来指定弹出窗口的显示名称 标签占位符 标签占位符能实现将单个图形显示用于多个相似的操作,从而节省开发和维护应用程序的时间. 例如,要为使用同一台机器将 ...

  4. 使用TensorFlow实现MNIST数据集分类

    1 MNIST数据集 MNIST数据集由70000张28x28像素的黑白图片组成,每一张图片都写有0~9中的一个数字,每个像素点的灰度值在0 ~ 255(0是黑色,255是白色)之间. MINST数据 ...

  5. Spring Boot图书管理系统项目实战-3.用户登录

    导航: pre:  2.项目搭建 next:4.基础信息管理 只挑重点的讲,具体的请看项目源码. 1.项目源码 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.登录页设计 <!DOCTYP ...

  6. win32 - Screen to bmp file(BYTE)

    void WINAPI CaptureScreenIntoFile() { BITMAPFILEHEADER bfHeader; BITMAPINFOHEADER biHeader; HGDIOBJ ...

  7. 第127篇:异步函数(async和await)练习题(异步,消息队列)

    好家伙,本篇为做题思考 书接上文   题目如下:  1.请给出下列代码的输出结果,并配合"消息队列"写出相关解释 async function foo() { console.lo ...

  8. Oracle触发器联合唯一约束

    Oracle支持可为空字端的唯一约束呢?下面就是用触发器作出的限制语句,仅供参考: CREATE OR REPLACE TRIGGER Tg_Completion_Test BEFORE INSERT ...

  9. 【Azure 事件中心】Spring Cloud Stream Event Hubs Binder 发送Event Hub消息遇见 Spec. Rule 1.3 - onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled serially 异常

    问题描述 开发Java Spring Cloud应用,需要发送消息到Azure Event Hub中.使用 Spring Cloud Stream Event Hubs Binder 依赖,应用执行一 ...

  10. 【Azure 应用服务】在App Service for Windows中实现反向代理

    问题描述 如何在App Service for Windows(.NET Stack)中,如何实现反向代理呢? 正向代理:客户端想要访问一个服务器,但是它可能无法直接访问这台服务器,这时候这可找一台可 ...