HDU3577Fast Arrangement(线段树+lazy)
One train can just take k passangers. And each passanger can just buy one ticket from station a to station b. Each train cannot take more passangers any time. The one who buy the ticket earlier which can be sold will always get the ticket.
The first line contains just one number k( 1 ≤ k ≤ 1000 ) and Q( 1 ≤ Q ≤ 100000 )
The following lines, each line contains two integers a and b, ( 1 ≤ a < b ≤ 1000000 ), indicate a query.
Huge Input, scanf recommanded.
Output the case number in the first line.
If the ith query can be satisfied, output i. i starting from 1. output an blank-space after each number.
Output a blank line after each test case.
1 2 3 5
即判断哪些人能上车;
构建线段树的两种情况:
1,知道范围,且范围不算太大,可以直接构建一个[1,Maxn]的线段树,这样左儿子和右儿子的编号(Lson=now<<1,Rson=now<<1|1)是固定的,不用标记。
2,不提前构造,累加cnt为新节点标号,加一个root;每个点再ch[2]记录左右儿子的编号。
lazy的使用,没啥可说的,注意该update就update。
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=;
int ans[maxn];
struct Node
{
int l,r,v,lazy;
};
struct Tree
{
Node node[maxn<<];
void build(int l,int r,int numb)
{
node[numb].l=l;
node[numb].r=r;
node[numb].v=;
node[numb].lazy=;
if(l==r) return;
int mid=(l+r)>>;
build(l,mid,numb<<);
build(mid+,r,numb<<|);
}
void PushUp(int numb)
{
node[numb].v=max(node[numb<<].v,node[numb<<|].v);
}
void PushDown(int numb)
{
node[numb<<].lazy+=node[numb].lazy;
node[numb<<|].lazy+=node[numb].lazy;
node[numb<<].v+=node[numb].lazy;
node[numb<<|].v+=node[numb].lazy;
node[numb].lazy=;
}
void Insert(int l,int r,int numb)
{
if(node[numb].l>=l&&node[numb].r<=r)
{
node[numb].v+=;
node[numb].lazy+=;
return;
}
if(node[numb].lazy) PushDown(numb);
int mid=(node[numb].r+node[numb].l)>>;
if(l>mid) Insert(l,r,numb<<|);
else if(r<=mid) Insert(l,r,numb<<);
else{
Insert(l,mid,numb<<);
Insert(mid+,r,numb<<|);
}
PushUp(numb);
}
int query(int l,int r,int numb)
{
if(node[numb].l>=l&&node[numb].r<=r){
return node[numb].v;
}
if(node[numb].lazy) PushDown(numb);
int mid=(node[numb].r+node[numb].l)>>;
if(l>mid) return query(l,r,numb<<|);
else if(r<=mid) return query(l,r,numb<<);
else{
return max(query(l,mid,numb<<),query(mid+,r,numb<<|));
}
}
};
Tree tree;
int main()
{
int t,Case=,len=,k,m,a,b;
scanf("%d",&t);
while(t--){
len=;
memset(ans,,sizeof(ans));
scanf("%d%d",&k,&m);
tree.build(,,);
for(int i=;i<m;i++){
scanf("%d%d",&a,&b);
b--;
if(tree.query(a,b,)<k){
ans[len++]=i+;
tree.Insert(a,b,);
}
}
printf("Case %d:\n",Case++);
for(int i=; i<len; i++)
printf("%d ",ans[i]);
printf("\n\n");
}
return ;
}
HDU3577Fast Arrangement(线段树+lazy)的更多相关文章
- JuQueen(线段树 lazy)
JuQueen Time Limit: 5 Sec Memory Limit: 512 MB Description Input Output Sample Input 10 10 5 state ...
- 分块+lazy 或者 线段树+lazy Codeforces Round #254 (Div. 2) E
E. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- POJ 2777——线段树Lazy的重要性
POJ 2777 Count Color --线段树Lazy的重要性 原题 链接:http://poj.org/problem?id=2777 Count Color Time Limit: 1000 ...
- poj3468 线段树+lazy标记
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 92921 ...
- poj 2777(线段树+lazy思想) 小小粉刷匠
http://poj.org/problem?id=2777 题目大意 涂颜色,输入长度,颜色总数,涂颜色次数,初始颜色都为1,然后当输入为C的时候将x到y涂为颜色z,输入为Q的时候输出x到y的颜色总 ...
- hdu 1698 Just a Hook 【线段树+lazy】
题目 写了一天的线段树,这道题主要说明一下sum是赋值的,不是累加的,并且在push_down的时候lazy也是赋值的.因可能对懒标记的理解还不是很透彻吧. #include <iostream ...
- HDU - 3577 Fast Arrangement 线段树
Fast Arrangement Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HDU 3577 Fast Arrangement ( 线段树 成段更新 区间最值 区间最大覆盖次数 )
线段树成段更新+区间最值. 注意某人的乘车区间是[a, b-1],因为他在b站就下车了. #include <cstdio> #include <cstring> #inclu ...
- HDU 3954 Level up(多颗线段树+lazy操作)
又是一开始觉得的水题,结果GG了好久的东西... 题意是给你n个英雄,每个英雄开始为1级经验为0,最多可以升到k级并且经验一直叠加,每一级都有一个经验值上限,达到就升级.接着给你两种操作:W li r ...
随机推荐
- Jquery.ScrollLoading图片延迟加载技术
关于分屏加载图片,像天猫.京东等电商图片较多页面很长,就采用了延迟加载技术. 目前很流行的做法就是滚动动态加载,显示屏幕之外的图片默认是不加载的, 随着页面的滚动,显示区域图片才被动态加载. 原理其实 ...
- [转]u盘读不出来怎么办大汇总
今天遇到的问题 http://www.upantool.com/jiaocheng/xiufu/2016/9958.html u盘读不出来怎么办大汇总 2016-12-14 21:42 来源: 本站整 ...
- Python自然语言处理 - 系列四
一 如何使用形式化语法来描述无限的句子集合的结构? --上下位无关文法 1.1 一个例子: grammar1 = nltk.parse_cfg(""&q ...
- vi的搜索和替换
搜索中进行替换 /which #搜索which cwthat #替换成that n #重复搜索 . #重复替换 一种类型的替换命令 g/pattern/s/old/new/g 第一个 g 表示是有选择 ...
- 基于IG的特征评分方法
本文简单介绍了熵.信息增益的概念,以及如何使用信息增益对监督学习的训练样本进行评估,评估每个字段的信息量. 1.熵的介绍 在信息论里面,熵是对不确定性的测量.通俗来讲,熵就是衡量随机变量随 ...
- 【HackerRank】The Love-Letter Mystery
James找到了他的朋友Harry要给女朋友的情书.James很爱恶作剧,所以他决定要胡搞一下.他把信中的每个单字都变成了回文.对任何给定的字符串,他可以减少其中任何一个字符的值,例如'd'可以变成' ...
- ⭐内核MKDEV(MAJOR, MINOR)宏
版本:linux-2.6.24.4宏: MKDEV(MAJOR, MINOR); 说明: 获取设备在设备表中的位置. MAJOR 主设备号 MINOR 次设 ...
- Linux与Android 多点触摸协议【转】
本文转载自:http://blog.csdn.net/xubin341719/article/details/7833277 一.Linux与Android 多点触摸协议 为了使用功能强大的多点触控设 ...
- 织梦dedecms 自带采集的缩略图地址后面有“/”斜杠的解决方法
本来想偷懒在网上找一些文档去解决织梦采集缩略图地址带“/”的问题的,可是找了找发现没有人写出解决方法,只好自己动手了. 过程很复杂,找了问题的原因也是找了半天,自己一点一点的测试.最后找到了问题所在. ...
- How to use Jenkins
一.关键点 1.how to start the build server? do i need to start some app to do this? I don't believe so... ...