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. idea java web 使用说明

    String realPath = request.getSession().getServletContext().getRealPath(uploadPath);//上传压缩包所在目录       ...

  2. Python自然语言处理 - 系列三

    有监督分类过程 ![enter image description here][1]例子:涉及一个特征器,给定一个姓名分析出是男性名字还是女性名字 分析:男性和女性的名字有一些鲜明的特点.以a,e 和 ...

  3. CSS3手风琴下拉菜单

    在线演示 本地下载

  4. 三 ip dns等配置

    一IP.端口.协议基本概念 ip的简单概念 互联网上的计算机,都会有一个唯一的32位的地址,ip地址 我们访问服务器,就必须通过ip地址 局域网里也有预留的ip地址  192/10/172.居于王的i ...

  5. linux下安装casperjs 开发运行环境

    casperjs是一个基于phantomjs的测试框架,使用python进行操作,所以一个完整的casperjs环境需要安装phantomjs和python. 1 phantomjs安装 到官网下载最 ...

  6. sem总结

    从实况搜索这些关键词 有没有排名,有排名 不用管,没有的话 就一点点网上加价格 ,加到有为止 一个单元关键字控制30以内差不多 如果关键词词量有限 ,病种相差不大 可以不用屏蔽 投产=销量/消费订购率 ...

  7. 未能将网站配置为使用ASP.NET4.X 解决方法

    WIN 10系统安装Visual Studio 2012新建ASP.NET MVC 4 WEB 应用程序出错 有些图片是网上截取而来,之前光顾着处理问题而忘记截图了,提示的ASP.net 版本有些不同 ...

  8. springcloud-声明式调用服务Feign

    springcloud项目例子:链接:https://pan.baidu.com/s/1O1PKrdvrq5c8sQUb7dQ5Pg 密码:ynir 作用: 基于Netflix Feign整合了Rib ...

  9. DataX的安装

    DataX的安装 1. 可下载tar包 https://github.com/alibaba/DataX/blob/master/userGuid.md 2. 下载源码自己编译 git clone h ...

  10. PAT1021. Deepest Root (25)

    之前不知道怎么判断是不是树,参考了 http://blog.csdn.net/eli850934234/article/details/8926263 但是最后有一个测试点有超时,在bfs里我用了数组 ...