Fast Arrangement

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 3563    Accepted Submission(s): 1024


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
 

Author
Louty (Special Thanks Nick Gu)
 

Source
 

Recommend
zhouzeyong

题意:设计一个卖票系统,已经卖出的位置在乘车区间内不能再卖出,输出第几条输入的票可以卖出

思路:用线段树,每卖出一张票就修改指定区间的票数,最后检查总票数即可

#include<cstdio>
#include<cstring>
#define MAXN 1000010
struct node{
int l, r,tag,num;
}tree[MAXN<<2];
int k,q, a, b,cas,len,cnt[MAXN];
int max(int a, int b)
{
return a > b ? a : b;
}
void build(int k, int l, int r)
{
tree[k].tag = 0; tree[k].num = 0;
tree[k].l = l; tree[k].r = r;
if (l == r)
return;
int mid = (l + r) >> 1;
build(k << 1, l, mid);
build(k << 1 | 1, mid + 1, r);
}
void pushup(int k)
{
tree[k].num = max(tree[k << 1].num, tree[k << 1 | 1].num);
}
void pushdown(int k)
{
tree[k << 1].num += tree[k].tag;
tree[k << 1 | 1].num += tree[k].tag;
tree[k << 1].tag += tree[k].tag;
tree[k << 1 | 1].tag += tree[k].tag;
tree[k].tag = 0; }
void update(int k, int l, int r, int x)
{
if (tree[k].l == l&&tree[k].r == r)
{
tree[k].num += x;
tree[k].tag += x;
return;
}
if (tree[k].tag)
pushdown(k);
int mid = (tree[k].l + tree[k].r) >> 1;
if (r <= mid)
update(k << 1, l, r, x);
else if (l >= mid + 1)
update(k << 1 | 1, l, r, x);
else
{
update(k << 1, l, mid, x);
update(k << 1 | 1, mid + 1, r, x);
}
pushup(k);
}
int query(int k, int l, int r)
{ if (tree[k].l == l&&tree[k].r == r)
return tree[k].num;
if (tree[k].tag)
pushdown(k);
int mid = (tree[k].l + tree[k].r) >> 1;
if (r <= mid)
return query(k << 1, l, r);
else if (l >= mid + 1)
return query(k << 1 | 1, l, r);
else
return max(query(k << 1, l, mid) , query(k << 1 | 1, mid + 1, r));
} int main()
{
int t;
cas = 1;
scanf("%d", &t);
while (t--)
{
memset(cnt, 0, sizeof(cnt));
len = 1;
scanf("%d%d", &k, &q);
build(1, 1, 1000010);
for (int i = 1; i <= q; i++)
{
scanf("%d%d", &a, &b);
b--;
if (query(1, a, b) < k)
{
cnt[len++] = i;
update(1, a, b, 1);
}
}
printf("Case %d:\n", cas++);
for (int i = 1; i < len; i++)
{
printf("%d ", cnt[i]);
}
printf("\n\n"); }
return 0;
}

HDU - 3577 Fast Arrangement 线段树的更多相关文章

  1. HDU 3577 Fast Arrangement (线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3577 题意不好理解,给你数字k表示这里车最多同时坐k个人,然后有q个询问,每个询问是每个人的上车和下车 ...

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

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

  3. hdu 3577 Fast Arrangement(线段树区间修改,求区间最小值)

    Problem Description Chinese always have the railway tickets problem because of its' huge amount of p ...

  4. hdu 5700区间交(线段树)

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  5. Snacks HDU 5692 dfs序列+线段树

    Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...

  6. HDU 5091---Beam Cannon(线段树+扫描线)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5091 Problem Description Recently, the γ galaxies bro ...

  7. HDU 1542 Atlantis(线段树扫描线+离散化求面积的并)

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  8. HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Sub ...

  9. HDU 5820 (可持久化线段树)

    Problem Lights (HDU 5820) 题目大意 在一个大小为50000*50000的矩形中,有n个路灯.(n<=500000) 询问是否每一对路灯之间存在一条道路,使得长度为|x1 ...

随机推荐

  1. 【js学习笔记】去除省、市、区、特别行政区、自治区

    不是很懂js,以前去除这些省.市.区的时候都是用的分支判断indexOf,如果!=-1则replace一次,今天看同事的代码,发现还有更简单的办法... var areaName = str.repl ...

  2. 同一个IIS绑定多个Htts 站点问题

    默认情况一个服务器的IIS只能绑定一个HTTPS也就是443端口 要实现多个站点对应HTTPS只能更改IIS配置 地址:C:Windowssystem32inetsrvconfigapplicatio ...

  3. Richard Stallman:让我们关注和尊敬自由软件教父

    1953年,Richard Stallman生于美国纽约曼哈顿区.在度过了并不快乐的童年之后,他在哈佛大学找到了自己的家.在MIT人工智能实验室工作期间,展露出了自己的计算 机天赋.对他来说,开发操作 ...

  4. 边框画的三角形给shadow

    本文地址:http://www.cnblogs.com/veinyin/p/8690882.html  要写一个对话气泡样式,我们首先想到的当然给是一个盒子,然后用边框画一个三角形定位过去. 如果不需 ...

  5. HDU 2095 find your present (2) 动态链表

    解题报告:输入一个n,后面紧跟着输入n个数,输入的这n个数中,除了有一个数的个数为奇数外,其它的数的个数都是偶数个,现在要你找出这个个数为奇数的这个数. 看起来好像很简单的样子,不过,这题的重点不在这 ...

  6. 回顾一些较简单的dp题

    1.导弹拦截  (+贪心) 两问:一个导弹拦截系统最多能拦多少导弹 要拦截所有导弹至少需要多少拦截系统 第一问感觉是一个比较巧妙的方法: 维护一个单调递减的序列 length[] 记录的是拦截导弹的高 ...

  7. JavaScript辅助响应式

    js响应式 rem辅助响应式布局:其实就是指在HTML页面的大小不断变化的时候,里面的宽.高.字体等等也随之变化,主要是通过获取window.innerwidth的值来进行判断,7.5rem===10 ...

  8. linux tar 解压出错

    今天用tar -xzvf php-7.2.3.tar.gz 解压php的tar包时报错 [root@VM_72_37_centos ~]# tar -xzvf php-.tar.gz gzip: st ...

  9. hdu 1004 Let the Balloon Rise(字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1004 Let the Balloon Rise Time Limit: 2000/1000 MS (J ...

  10. aarch64_n3

    ntp-doc-4.2.8p10-1.fc26.noarch.rpm 2017-03-24 02:07 1.2M fedora Mirroring Project ntp-perl-4.2.8p10- ...