zoukankan      html  css  js  c++  java
  • luoguP1083 借教室(题解)(我用的线段树)

    luoguP1083 借教室 题目

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<string>
    #include<string>
    #include<algorithm>
    #define rg register
    #define N 1000050
    #define lc now<<1
    #define rc (now<<1)+1
    using namespace std;
    
    int n,m;
    bool flag;
    int a[N];
    struct tree{
        int l,r,minn,lazy;
    }ljl[N<<2];
    
    inline int read()
    {
        int s=0,m=1;char ch=getchar();
        while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
        if(ch=='-')m=-1,ch=getchar();
        while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+ch-'0',ch=getchar();
        return s*m;
    }
    
    void build(int now,int ll,int rr)
    {
        if(ll==rr)
            {
                ljl[now].l=ljl[now].r=ll;
                ljl[now].minn=a[ll];
            }
        else
            {
                int mid=(ll+rr)>>1;
                build(lc,ll,mid);
                build(rc,mid+1,rr);
                ljl[now].l=ll;ljl[now].r=rr;
                ljl[now].minn=min(ljl[lc].minn,ljl[rc].minn);
            }
    }
    
    void push_down(int now)
    {
        if(ljl[now].lazy!=0)
            {
                ljl[lc].lazy+=ljl[now].lazy;
                ljl[rc].lazy+=ljl[now].lazy;
                ljl[lc].minn-=ljl[now].lazy;
                ljl[rc].minn-=ljl[now].lazy;
                ljl[now].lazy=0;
            }
    }
    
    void xiugai(int now,int ll,int rr,int d)
    {
        push_down(now);
        if(ljl[now].l==ll&&ljl[now].r==rr)
            {
                ljl[now].lazy+=d;
                ljl[now].minn-=d;
                //            if(ljl[now].minn<0)flag=1;
            }
        else
            {
                int mid=(ljl[now].l+ljl[now].r)/2;
                if(rr<=mid)xiugai(2*now,ll,rr,d);
                if(ll>mid)xiugai(2*now+1,ll,rr,d);
                if(ll<=mid&&rr>mid)
                    {
                        xiugai(2*now,ll,mid,d);
                        xiugai(2*now+1,mid+1,rr,d);
                    }
                ljl[now].minn=min(ljl[lc].minn,ljl[rc].minn);
            }
    }
    
    int main()
    {
        n=read();m=read();
        for(rg int i=1;i<=n;++i)a[i]=read();
        build(1,1,n);
        for(rg int i=1;i<=m;++i)
            {
                rg int num=read(),st=read(),et=read();
                xiugai(1,st,et,num);
                if(ljl[1].minn<0)
                    {
                        printf("-1
    %d
    ",i);
                        exit(0);
                    }
            }
        puts("0");
        return 0;
    }
  • 相关阅读:
    非模式窗体和模式窗体(转
    一次性帮你解决毕业论文的所有排版问题
    c# Wndproc的使用方法
    ref和out 转
    c# 基本语法(转)
    U盘装/虚拟光驱 装双系统
    U盘启动盘 装系统
    Hibernate查询条件封装对象Expression介绍 Hi
    asp.net实现 gridview 鼠标单击任意字段选中一行 ,并获取数据 Hi
    C#如何取出非公共成员 Hi
  • 原文地址:https://www.cnblogs.com/cjoierljl/p/9074518.html
Copyright © 2011-2022 走看看