zoukankan      html  css  js  c++  java
  • bzoj1593/poj3667

    HYSBZ - 1593  POJ - 3667 

    题意:中文题

    思路:线段树区间合并裸题,不过lazy初始化搞错了,每次只初始化了叶子节点,wa一年,bzoj和poj又同时来例假,不过洛谷也有这个题,可能是太经典了把,但是居然卡我ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); 无限RE,果然是什么错误都能返回RE。。。

    AC代码:

    #include "iostream"
    #include "string.h"
    #include "stack"
    #include "queue"
    #include "string"
    #include "vector"
    #include "set"
    #include "map"
    #include "algorithm"
    #include "stdio.h"
    #include "math.h"
    #define ll long long
    #define endl "
    "
    #define bug(x) cout<<x<<" "<<"UUUUU"<<endl;
    #define mem(a,x) memset(a,x,sizeof(a))
    #define mp(x,y) make_pair(x,y)
    #define ft (frist)
    #define sd (second)
    #define pb(x) push_back(x)
    #define lrt (rt<<1)
    #define rrt (rt<<1|1)
    using namespace std;
    const long long INF = 1e18+1LL;
    const int inf = 1e9+1e8;
    const int N=1e5+100;
    const ll mod=1e9+7;
    
    int sum[N<<1],lsum[N<<1],rsum[N<<1],lazy[N<<1],n,q;
    void push_up(int rt, int m){
        int rm=m>>1, lm=m-rm;
        lsum[rt]=lsum[lrt];
        rsum[rt]=rsum[rrt];
        if(lsum[rt]==lm){
            lsum[rt]+=lsum[rrt];
        }
        if(rsum[rt]==rm){
            rsum[rt]+=rsum[lrt];
        }
        sum[rt]=max(sum[lrt],sum[rrt]);
        sum[rt]=max(sum[rt],lsum[rrt]+rsum[lrt]);
    }
    
    void push_down(int rt, int m){
        int rm=m>>1, lm=m-rm;
        if(lazy[rt]==0) lm=rm=0;
        lsum[lrt]=rsum[lrt]=sum[lrt]=lm;
        lsum[rrt]=rsum[rrt]=sum[rrt]=rm;
        lazy[lrt]=lazy[rrt]=lazy[rt];
        lazy[rt]=-1;
    }
    
    void creat(int rt, int l, int r){
        if(l==r){
            sum[rt]=lsum[rt]=rsum[rt]=1;
            return;
        }
        lazy[rt]=-1;
        int mid=l+r>>1;
        creat(lrt,l,mid);
        creat(rrt,mid+1,r);
        push_up(rt,r-l+1);
    }
    
    void update(int rt, int l, int r, int L, int R, int f){
        if(l==L && r==R){
            int m=r-l+1;
            lazy[rt]=f;
            if(!f) m=0;
            lsum[rt]=rsum[rt]=sum[rt]=m;
            return;
        }
        if(lazy[rt]!=-1) push_down(rt,r-l+1);
        int mid=l+r>>1;
        if(R<=mid) update(lrt, l, mid, L, R, f);
        else if(L>mid) update(rrt, mid+1, r, L, R, f);
        else update(lrt, l, mid, L, mid, f), update(rrt, mid+1, r, mid+1, R, f);
        push_up(rt, r-l+1);
    }
    
    int query(int rt, int l ,int r, int b){
        if(lsum[rt]>=b || l==r) return l;
        if(lazy[rt]!=-1) push_down(rt,r-l+1);
        int mid=l+r>>1;
        if(sum[lrt]>=b) return query(lrt,l,mid,b);
        else if(rsum[lrt]+lsum[rrt]>=b) return mid-rsum[lrt]+1;
        else return query(rrt,mid+1,r,b);
    }
    
    int main(){
        ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
        while(cin>>n>>q){
            creat(1,1,n);
            int a,b,c;
            while(q--){
                cin>>a>>b;
                if(a==2){
                    cin>>c;
                    update(1,1,n,b,b+c-1,1);
                }
                else{
                    if(sum[1]<b){
                        cout<<"0
    ";
                        continue;
                    }
                    c=query(1,1,n,b);
                    cout<<c<<"
    ";
                    update(1,1,n,c,c+b-1,0);
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    [python] defaultdict
    [VM workstation]VM workstation 中的虚拟机连不上网络
    [Docker] docker 基础学习笔记1(共6篇)
    [python] import curses
    servlet 产生随机验证码
    JSTL标签库 sql标签
    JSTLLearning
    Ajax实现联想(建议)功能
    HDU 1241
    Servlet实现文件上传
  • 原文地址:https://www.cnblogs.com/max88888888/p/7265023.html
Copyright © 2011-2022 走看看