HDU - 3577 Fast Arrangement 线段树
Fast Arrangement
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 3563 Accepted Submission(s): 1024
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.
3 6
1 6
1 6
3 4
1 5
1 2
2 4
1 2 3 5
题意:设计一个卖票系统,已经卖出的位置在乘车区间内不能再卖出,输出第几条输入的票可以卖出
思路:用线段树,每卖出一张票就修改指定区间的票数,最后检查总票数即可
#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 线段树的更多相关文章
- HDU 3577 Fast Arrangement (线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3577 题意不好理解,给你数字k表示这里车最多同时坐k个人,然后有q个询问,每个询问是每个人的上车和下车 ...
- HDU 3577 Fast Arrangement ( 线段树 成段更新 区间最值 区间最大覆盖次数 )
线段树成段更新+区间最值. 注意某人的乘车区间是[a, b-1],因为他在b站就下车了. #include <cstdio> #include <cstring> #inclu ...
- hdu 3577 Fast Arrangement(线段树区间修改,求区间最小值)
Problem Description Chinese always have the railway tickets problem because of its' huge amount of p ...
- hdu 5700区间交(线段树)
区间交 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...
- Snacks HDU 5692 dfs序列+线段树
Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...
- HDU 5091---Beam Cannon(线段树+扫描线)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5091 Problem Description Recently, the γ galaxies bro ...
- HDU 1542 Atlantis(线段树扫描线+离散化求面积的并)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Sub ...
- HDU 5820 (可持久化线段树)
Problem Lights (HDU 5820) 题目大意 在一个大小为50000*50000的矩形中,有n个路灯.(n<=500000) 询问是否每一对路灯之间存在一条道路,使得长度为|x1 ...
随机推荐
- Grafana关键词
The open platform for beautiful analytics and monitoring. data source.panels.apps.dashboards. Organi ...
- 多角度看.NET面试题
1.ASP.NET中的身份验证有那些?你当前项目采用什么方式验证请解释 身份验证是从用户获取名称和密码等标识凭证并根据某些机构验证这些凭据的过程.如果凭据有效,则提交该凭据的实体被视为通 ...
- 20155231 2016-2017-2 《Java程序设计》第7周学习总结
20155231 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 学习目标 了解Lambda语法 了解方法引用 了解Fucntional与Stream API ...
- HDU 2073 叠框
解题报告:一个字符串的题,最恶心的还是格式问题,PE了很多次,要求是每个测试数据的后面都带有一个空行,但是最后一个不能有空行,所以只能把第一组 数据的前面不输出空行,而后面的每一组数据都输出空行,这样 ...
- shell作业后台执行的方法
来思考几种场景: 1.某个脚本需要执行时间比较长,无人值守,可能执行过程中因ssh会话超时而中断? 2.某次测试一段代码,需要临时放入后台运行? 3.放入后台运行的脚本,需要在一段时间后重新调到前台? ...
- Anaconda+django写出第一个web app(五)
今天开始学习网页风格和设计,就像python有Web框架一样,也有一些CSS框架.对于CSS框架,我们可以使用默认的样式,也可以在原基础上编辑修改.本教程使用的是materialize这个CSS框架[ ...
- 【译】第六篇 Replication:合并复制-发布
本篇文章是SQL Server Replication系列的第六篇,详细内容请参考原文. 合并复制,类似于事务复制,包括一个发布服务器,一个分发服务器和一个或多个订阅服务器.每一个发布服务器上可以定义 ...
- [Ubuntu 14.04] 创建可以用于Android的WIFI热点
Ubuntu的网络管理为创建Wifi热点提供了方便,可是因为它用了ad-hoc网络,所以其创建的Wifi又不能让Android系统使用.这篇文字就是为了解决这个问题 1.Install AP-Host ...
- Remove K Digits
Given string A representative a positive integer which has N digits, remove any k digits of the numb ...
- WCF 数据契约(DataContract)
服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型. 一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所 ...