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 ...
随机推荐
- notepad++自动补全
菜单栏中的语言,选择想要的语言,就能看到代码补全了,设置是更改主题的 添加注释快捷键 ctrl+Q
- Android 结束进程的方法forceStopPackage
ActivityManager sd = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); Method method = Clas ...
- Git版本控制系统VCS
Git版本控制系统VCS 一.版本控制系统基本情况说明 版本控制是一种记录一个或者若干个文件内容的变化,以便将来查阅特定版本修订情况的系统 1.作用 记录文件的所有历史变化 随时可回复到任何一个历史状 ...
- arcgis for flex map遮罩
效果1:map的遮罩(对整个map进行遮罩) 效果2:对某个图层进行遮罩
- 大数据架构之:Kafka
Kafka 是一个高吞吐.分布式.基于发布订阅的消息系统,利用Kafka技术可在廉价PC Server上搭建起大规模消息系统.Kafka具有消息持久化.高吞吐.分布式.多客户端支持.实时等特性,适用于 ...
- 【转载】linux获取mac地址
#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/soc ...
- Delphi中ComPort通信中的数据处理
源: Delphi中ComPort通信中的数据处理
- [SCOI2013]火柴棍数字(背包)
题目 做饭 由于越高位越好,我们先得出能组成的最高位 \(f[i][j][k]\)表示从低到高位第\(i\)位,手里拿着\(j\)根火柴,第\(i\)位是否为\(0\)所需要的最少火柴 我们转移仅需得 ...
- QT应用程序设置图标
一.纯Qt 1.下载图标:app.ico 2.新建记事本,输入:IDI_ICON1 ICON DISCARDABLE"app.ico":改变名字为jude.rc 3.将两个文件放在 ...
- Struts2全局异常处理
1.在struts.xml中配置全局异常处理 在Action中抛出异常,此异常可以是action自己抛的,也可以是Service抛出来的,都会跳转到全局异常中,只有在当前Action中配置域全局异常返 ...