Problem Description
Chinese always have the railway tickets problem because of its' huge amount of passangers and stations. Now goverment need you to develop a new tickets query system.
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.
 
Input
The input contains servel test cases. The first line is the case number. In each test case:
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
For each test case, output three lines:
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.
 
Sample Input
1
3 6
1 6
1 6
3 4
1 5
1 2
2 4
 
Sample Output
Case 1:
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)的更多相关文章

  1. JuQueen(线段树 lazy)

    JuQueen Time Limit: 5 Sec  Memory Limit: 512 MB Description Input Output Sample Input 10 10 5 state ...

  2. 分块+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 ...

  3. POJ 2777——线段树Lazy的重要性

    POJ 2777 Count Color --线段树Lazy的重要性 原题 链接:http://poj.org/problem?id=2777 Count Color Time Limit: 1000 ...

  4. poj3468 线段树+lazy标记

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 92921   ...

  5. poj 2777(线段树+lazy思想) 小小粉刷匠

    http://poj.org/problem?id=2777 题目大意 涂颜色,输入长度,颜色总数,涂颜色次数,初始颜色都为1,然后当输入为C的时候将x到y涂为颜色z,输入为Q的时候输出x到y的颜色总 ...

  6. hdu 1698 Just a Hook 【线段树+lazy】

    题目 写了一天的线段树,这道题主要说明一下sum是赋值的,不是累加的,并且在push_down的时候lazy也是赋值的.因可能对懒标记的理解还不是很透彻吧. #include <iostream ...

  7. HDU - 3577 Fast Arrangement 线段树

    Fast Arrangement Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  8. HDU 3577 Fast Arrangement ( 线段树 成段更新 区间最值 区间最大覆盖次数 )

    线段树成段更新+区间最值. 注意某人的乘车区间是[a, b-1],因为他在b站就下车了. #include <cstdio> #include <cstring> #inclu ...

  9. HDU 3954 Level up(多颗线段树+lazy操作)

    又是一开始觉得的水题,结果GG了好久的东西... 题意是给你n个英雄,每个英雄开始为1级经验为0,最多可以升到k级并且经验一直叠加,每一级都有一个经验值上限,达到就升级.接着给你两种操作:W li r ...

随机推荐

  1. PHP生成缩略图,控制图片质量,支持.png .jpg .gif

    namespace common\components; class ResizeImageHelper { public $type;//图片类型 public $width;//实际宽度 publ ...

  2. Qt核心机制和原理

    转:http://blog.csdn.net/light_in_dark/article/details/64125085 ★了解Qt和C++的关系 ★掌握Qt的信号/槽机制的原理和使用方法 ★了解Q ...

  3. 蓝牙固件升级(OTA升级)原理设计

    转:http://blog.csdn.net/yueqian_scut/article/details/50849033 固件空中升级(OTA)与固件二次引导的原理和设计 原创 2016年03月10日 ...

  4. PHP搜索文件夹下全部文件

    搜索文件夹下全部文件 //搜索文件夹下全部文件,暂时不支持中文文件名 public function scanFile($path) { if (!is_dir($path)) return arra ...

  5. ORA-01034和ORA-27101的错误

    我本机安装的数据库版本是ORACLE 11G R2,用plsql连接时候,报ora-12514如下错误: 但是在cmd里用sqlplus连接已经创建的用户时候,报如下错误: ORA-01034 - O ...

  6. iOS_数据存取(二)

    本节内容目录: 一.SQLite3 二.Core Data 一.SQlite3 SQLite3是⼀款开源的嵌入式关系型数据库,可移植性好.易使用.内存开销小SQLite3是⽆类型的,意味着你可以保存任 ...

  7. 一个gpio 不受控制的bug

    前几天调试一个flash灯的驱动程序,这可ic 有两个控制pin, 一个叫en1 一个叫en2, 根据spec的说明,不同的组合将产生不同的输出电流.但我发现,那个en1 这个pin 死活是拉不高的, ...

  8. 查看SELinux状态

    查看SELinux状态:1./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 2.getenforce ##也可以用这个命令检查 关闭S ...

  9. 医院内外网之间通过网闸交互,通过端口转发加nginx代理实现内网访问外网

    首先介绍下主要需求,很简单,就是要在医院his系统内嵌公司的平台,实现内网直接访问外网 这是院方给我提供的网闸相关配置,105是医院内网的服务器,120是外网的服务器,中间通过网闸配置的几个端口实现互 ...

  10. json数据与Gson工具类的使用

    JS中使用JSON JSON对象 --> JSON字符串:JSON.stringify(对象) JSON字符串 --> JSON对象:JSON.parse(JSON字符串) <scr ...