题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3577

题意不好理解,给你数字k表示这里车最多同时坐k个人,然后有q个询问,每个询问是每个人的上车和下车时间,每个人按次序上车,问哪些人能上车输出他们的序号。

这题用线段树的成段更新,把每个人的上下车时间看做一个线段,每次上车就把这个区间都加1,但是上车的前提是这个区间上的最大值不超过k。有个坑点就是一个人上下车的时间是左闭右开区间,可以想到要是一个人下车,另一个人上车,这个情况下这个点的大小还是不变的。还有注意格式...

 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 1e6 + ;
struct segtree {
int l , r , sum , add;
}T[MAXN << ];
int x[MAXN / ] , y[MAXN / ] , ans[MAXN / ]; void init(int p , int l , int r) {
int mid = (l + r) >> ;
T[p].l = l , T[p].r = r , T[p].add = ;
if(l == r) {
T[p].sum = ;
return ;
}
init(p << , l , mid);
init((p << )| , mid + , r);
T[p].sum = max(T[p << ].sum , T[(p << )|].sum);
} void updata(int p , int l , int r , int val) {
int mid = (T[p].l + T[p].r) >> ;
if(l == T[p].l && T[p].r == r) {
T[p].sum += val;
T[p].add += val;
return ;
}
if(T[p].add) {
T[p << ].sum += T[p].add;
T[p << ].add += T[p].add;
T[(p << )|].sum += T[p].add;
T[(p << )|].add += T[p].add;
T[p].add = ;
}
if(r <= mid) {
updata(p << , l , r , val);
}
else if(l > mid) {
updata((p << )| , l , r , val);
}
else {
updata(p << , l , mid ,val);
updata((p << )| , mid + , r , val);
}
T[p].sum = max(T[p << ].sum , max(T[(p << )|].sum , T[p].sum));
} int query(int p , int l , int r) {
int mid = (T[p].l + T[p].r) >> ;
if(l == T[p].l && T[p].r == r) {
return T[p].sum;
}
if(T[p].add) {
T[p << ].sum += T[p].add;
T[p << ].add += T[p].add;
T[(p << )|].sum += T[p].add;
T[(p << )|].add += T[p].add;
T[p].add = ;
}
if(r <= mid) {
return query(p << , l , r);
}
else if(l > mid) {
return query((p << )| , l , r);
}
else {
return max(query(p << , l , mid) , query((p << )| , mid + , r));
}
} int main()
{
int t , k , m;
scanf("%d" , &t);
for(int ca = ; ca <= t ; ca++) {
scanf("%d %d" , &k , &m);
int len = -;
for(int i = ; i <= m ; i++) {
scanf("%d %d" , x + i , y + i);
y[i]--;
len = max(x[i] , len);
len = max(y[i] , len);
}
init( , , len);
int cont = ;
for(int i = ; i <= m ; i++) {
int temp = query( , x[i] , y[i]);
if(temp < k) {
ans[++cont] = i;
updata( , x[i] , y[i] , );
}
}
printf("Case %d:\n" , ca);
for(int i = ; i <= cont ; i++) {
printf("%d " , ans[i]);
}
printf("\n\n");
}
}

HDU 3577 Fast Arrangement (线段树区间更新)的更多相关文章

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

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

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

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

  3. HDU - 3577 Fast Arrangement 线段树

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

  4. HDU 4902 Nice boat --线段树(区间更新)

    题意:给一个数字序列,第一类操作是将[l,r]内的数全赋为x ,第二类操作是将[l,r]中大于x的数赋为该数与x的gcd,若干操作后输出整个序列. 解法: 本题线段树要维护的最重要的东西就是一个区间内 ...

  5. hdu 1698+poj 3468 (线段树 区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=1698 这个题意翻译起来有点猥琐啊,还是和谐一点吧 和涂颜色差不多,区间初始都为1,然后操作都是将x到y改为z,注 ...

  6. hdu 3397 Sequence operation 线段树 区间更新 区间合并

    题意: 5种操作,所有数字都为0或1 0 a b:将[a,b]置0 1 a b:将[a,b]置1 2 a b:[a,b]中的0和1互换 3 a b:查询[a,b]中的1的数量 4 a b:查询[a,b ...

  7. HDU3577 线段树(区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3577 ,普通的线段树区间更新题目,较简单. 相当于一个区间覆盖问题,有一点要注意的就是叶子节点是一个长 ...

  8. HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 解题报告:一面墙长度为n,有N个单元,每个单元编号从1到n,墙的初始的颜色是2,一共有30种颜色 ...

  9. HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...

随机推荐

  1. 函数buf_page_address_fold

    /********************************************************************//** Calculates a folded value ...

  2. Jquery 弹出新窗体

    开始先用css将这个DIV设好位置,并且隐藏 function winshow() { var winNode = $(".win"); winNode.show("sl ...

  3. android通过httpClient请求获取JSON数据并且解析

    使用.net创建一个ashx文件,并response.write  json格式 public void ProcessRequest(HttpContext context) { context.R ...

  4. Redis必要的一些配置

    [root@localhost202 redis-2.8.19]# /usr/local/redis/bin/redis-server >> /data/redis-start.txt   ...

  5. busybox filesystem udhcpc 原理

    /******************************************************************** * busybox filesystem udhcpc 原理 ...

  6. POJ:最长上升子序列

    Title: http://poj.org/problem?id=2533 Description A numeric sequence of ai is ordered if a1 < a2  ...

  7. HDU 5407 CRB and Candies

    题意:给一个正整数k,求lcm((k, 0), (k, 1), ..., (k, k)) 解法:在oeis上查了这个序列,得知答案即为lcm(1, 2, ..., k + 1) / (k + 1),而 ...

  8. ashx-auth-黑色简洁验证码

    ylbtech-util: ashx-auth-黑色简洁验证码 ashx-auth-黑色简洁验证码 1.A,效果图返回顶部   1.B,源代码返回顶部 /ImageUniqueCode.ashx &l ...

  9. Delphi中编辑word

      其他(28)   //启动Word   try     wordapplication1.connect;   except     messagedlg('word may not be ins ...

  10. 遍历 集合 Dictionary 的时候修改集合 方法

    Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("1" ...