bzoj1651:线段树+打标记

好吧我不知道究竟怎么了,明明自己测的数据能过,不理了。是因为没有先建树的原因然后哪里死了?草。。。以后再来。。明明道水题。

--------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define clr(x,c) memset(x,c,sizeof(x))
int read(){
    int x=0;
    char c=getchar();
    while(!isdigit(c)){
        c=getchar();
    }
    while(isdigit(c)){
        x=x*10+c-‘0‘;
        c=getchar();
    }
    return x;
}
int s,t,add[4000000],nmax[4000000]; 

void insert(int o,int l,int r){
    if(r>l)
      nmax[o]=max(nmax[o*2],nmax[o*2+1]);
    nmax[o]+=add[o];
} 

void update(int o,int l,int r){
    if(s<=l&&r<=t){
       add[o]+=1;
    }
    else{
        int m=l+(r-l)/2;
        if(t<=m)
          update(o*2,l,m);
        else if(s>m)
          update(o*2+1,m+1,r);
        else{
            update(o*2,l,m);
            update(o*2+1,m+1,r);
        }
    }
    insert(o,l,r); 

}
int main(){
    clr(nmax,0);
    clr(add,0);
    int n=read();
    rep(i,n){
        s=read(),t=read();
        update(1,1,1000000);
    }
    printf("%d\n",nmax[1]);
    return 0;
}

--------------------------------------------------------------------------------

时间: 2024-10-06 16:51:37

bzoj1651:线段树+打标记的相关文章

线段树lazy标记??Hdu4902

Nice boat Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 335    Accepted Submission(s): 159 Problem Description There is an old country and the king fell in love with a devil. The devil al

fzu 2171 线段树 lazy标记

http://acm.fzu.edu.cn/problem.php?pid=2171      Problem 2171 防守阵地 II Accept: 73    Submit: 256Time Limit: 3000 mSec    Memory Limit : 32768 KB Problem Description 部队中总共有N个士兵,每个士兵有各自的能力指数Xi,在一次演练中,指挥部确定了M个需要防守的地点,指挥部将选择M个士兵依次进入指定地点进行防守任务,获得的参考指数即为M个士兵

POJ 3468 线段树+lazy标记

lazy标记 Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:%I64d & %I64u Submit Status Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to

HDU 1698 Just a Hook (线段树延迟标记(lazy))

题意:有n个数初始值都为1,m个操作a,b,c,表示把区间[a,b]变为c,求最后n个数的和. 经典区间更新求和问题,需要用到延迟标记(或者说是懒惰标记),简单老说就是每次更新 的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新或询问的时候. #include<cstdio> #include<stdlib.h> #include<string.h> #include<string> #include<map> #include<cm

hdu-3397 Sequence operation 线段树多种标记

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3397 题目大意: 0 a b表示a-b区间置为0 1 a b表示a-b区间置为1 2 a b表示a-b区间中的0变成1,1变成0 3 a b表示a-b区间中的1的数目 4 a b表示a-b区间中最长连续1的长度 解题思路: 线段树多种标记. 需要处理的东西比较多: 做题的时候发现一个问题: 我的宏定义Max不可以用于函数,尤其是递归函数,这样会使得同一函数重复调用好几遍,递归函数的话更会超时. 1

[P2894][USACO08FEB] 酒店Hotel (线段树+懒标记下传)

题意:有 n个房间,题目给出两个操作,若 op==1,就输出最靠左的连续空房数量为 x的房间序列的最左边的序号,然后将这些房间改为入住:若 op==2,就将从 x~y的的序列全部改为空房: 解法:线段树+懒标记下传: 1.线段树:题目让在一个很长的序列操作很多次,暴力显然过不了,要用线段树优化: 2.懒标记下传:这是本题的精髓.   此题要维护的不是序列上的数值总和,而是该序列的最长连续空房的长度 sum,从该节点从左向右数最长的连续空房长度 lm,以及从该节点从右向左数最长的连续空房长度 rm

[hiho 22]线段树-lazy标记的下放

题目描述 之前提到过,线段树之所以更新查询快,是因为区间更新有lazy标记使得不需要每次都操作到叶子节点. 但是如果要操作一个节点时,其父节点上的lazy标记应当被释放,否则该节点无法得到最新的正确结果. 因而lazy标记下放的策略是在需要操作某个节点的子节点时,将该节点的lazy标记全部下放.见第69行. 同时应当注意,给某个节点增加lazy标记时,不要忘了修改该节点的相关统计值.因为更新完该节点后还要马上修改其父节点的统计值.见第80行. 代码如下: #include <stdio.h>

bzoj1230:线段树+打标记

和白书讲的那道线段树区间修改的第二种类型很相似吧.写不算久: 1.在该区间更新说明必定牵涉这个区间,所以直接先pushdown: 2.往下传是对子区间的更新: 3.如果原来子节点没有标记,那么现在有了,如果原来子节点有标记,那么改了一边又把他改了回来所以没有标记了: ------------------------------------------------------------------------------ #include<cstdio>#include<cstring&

bzoj 3772 :精神污染 线段树+打标记 or 主席树

3772: 精神污染 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 315  Solved: 87[Submit][Status][Discuss] Description 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区,是日本西部门户,海陆空交通设施发达.濑户内海沿岸气候温暖,多晴天,有日本少见的贸易良港神户港所在的神户

浅析__线段树延迟标记

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 当中有文字系转载! 区间更新是指更新某个区间内的叶子节点的值,由于涉及到的叶子节点不止一个,而叶子节点会影响其对应的非叶父节点,那么回溯须要更新的非叶子节点也会有非常多,假设一次性更新完,操作的时间复杂度肯定不是O(lgn),比如当我们要更新区间[0,3]内的叶子节点时,须要更新除了叶子节点3,9外的全部其它节点.为此引入了线段树中的延迟标记概念,这也是线段树的精华所在. 延迟标记