线段树复习打卡——1318: 借教室

http://61.139.95.227:82/problem.php?id=1318

线段树区间修改模版

#include <bits/stdc++.h>
#define read read()
#define up(i,l,r) for(int i = (l);i <= (r);i++)
#define down(i,l,r) for(int i = (l);i >= (r);i--)
#define ll long long
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;
int read
{
    int x = 0; char ch = getchar();
    while(ch < 48 || ch > 57) ch = getchar();
    while(ch >=48 && ch <= 57){x = 10 * x + ch - 48; ch = getchar();}
    return x;
}
const int N = 1e6 + 5;
int n,m,a[N];
int MIN[N<<2],lazy[N<<2];

void pushup(int rt)
{
    MIN[rt] = min(MIN[rt<<1] , MIN[rt<<1|1]);
}

void buildtree(int l,int r,int rt)
{
    if(l == r)
    {
        MIN[rt] = a[l];
        return;
    }
    int mid = (l + r)>>1;
    buildtree(lson);
    buildtree(rson);
    pushup(rt);
}

void pushdown(int rt)
{
    if(!lazy[rt]) return;
    lazy[rt<<1] += lazy[rt];
    lazy[rt<<1|1] += lazy[rt];
    MIN[rt<<1] -= lazy[rt];//rt
    MIN[rt<<1|1] -= lazy[rt];//rt
    lazy[rt] = 0;
}

void update(int L,int R,int d,int l,int r,int rt)
{
    if(L <= l && R >= r)
    {
        lazy[rt] += d;
        MIN[rt] -= d;
        return;
    }
    pushdown(rt);
    int mid = (l + r)>>1;
    if(L <= mid) update(L,R,d,lson);
    if(R >  mid) update(L,R,d,rson);
    pushup(rt);
}

int main()
{
//    freopen("input.txt","r",stdin);
    n = read; m = read;
    up(i,1,n) a[i] = read;
    buildtree(1,n,1);
    up(i,1,m)
    {
        int d = read,s = read, t = read;
        update(s,t,d,1,n,1);
        if(MIN[1] < 0) printf("-1\n%d",i) , exit(0);
    }
    printf("0");
    return 0;
}

原文地址:https://www.cnblogs.com/mzg1805/p/10333058.html

时间: 2024-10-12 09:17:46

线段树复习打卡——1318: 借教室的相关文章

【BZOJ4942】[Noi2017]整数 线段树+DFS(卡过)

[BZOJ4942][Noi2017]整数 题目描述去uoj 题解:如果只有加法,那么直接暴力即可...(因为1的数量最多nlogn个) 先考虑加法,比较显然的做法就是将A二进制分解成log位,然后依次更新这log位,如果最高位依然有进位,那么找到最高位后面的第一个0,将中间的所有1变成0,那个0变成1.这个显然要用到线段树,但是复杂度是nlog2n的,肯定过不去. 于是我在考场上yy了一下,这log位是连续的,我们每次都要花费log的时间去修改一个岂不是很浪费?我们可以先在线段树上找到这段区间

线段树复习

#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,"模拟都市"是他们非常喜欢的一个游戏,在这个游戏里面他们可以化身上帝模式,买卖房产. 在这个游戏里,会不断的发生如下两种事件:一种是房屋自发的涨价或者降价,而另一种是政府有关部门针对房价的硬性调控.房价的变化自然影响到小Hi和小Ho的决策,所以他们希望能够知道任意时刻某个街道中所有房屋的房价总和是多少--但是很不幸的,游戏本身并不提供这样的计算

线段树区间覆盖 蛤玮打扫教室(zzuli 1877)

http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1877 Description 现在知道一共有n个机房,算上蛤玮一共有m个队员,教练做了m个签,每个签上写着两个数L,R(L<=R),抽到的人要把[L,R]的教室全部打扫一遍.由于蛤玮是队长而且他很懒,他通过某种交易提前知道了所有m个签上面写的是什么,而且通过某种魔法可以控制自己抽到哪个签.一个教室被打扫一次就干净了,所以蛤玮想知道自己抽哪些签可以不用打扫教室而且不会被教练发现,即他抽到的区间全都会

线段树区间修改模板

本来打算把大白书第三章一口气攻下来的,但是这个线段树也是卡了好久. 不敢过题太快,怕自己走马观花到头来结果什么都不会. 可也不能再拖了,在做题中也许有更多的体会. 模板一:1 L R v 表示区间[L, R]所有元素都加上v2 L R   表示查询区间[L, R]的sum, min, maxsumv[o]的定义为:如果只执行节点o及其子孙节点的中的add操作,节点o对应区间中所有数之和 1 //线段树区间修改 2 //1 L R v 表示区间[L, R]所有元素都加上v 3 //2 L R 表示

XTU1238 Segment Tree (线段树&#183;区间最值更新)

对一个数组有四种操作 1: 将区间[ l, r] 中的所有值都加上c 2:将区间 [l, r] 中所有比c大的值改为c 3:将区间 [l, r] 中所有比c小的值改为c 4:输出区间 [l, r] 中所有数的最小值和最大值 对每个操作4输出对应最小值和最大值基础的线段树  在湘潭卡了好久没写出来  线段树维护三个值 区间最大值 maxv, 区间最小值minv, 区间增加的值add  操作1是... http://www.worlduc.com/blog2012.aspx?bid=44692767

hdu 1166 线段树单点更新

等线段树复习完再做个总结 1101 2 3 4 5 6 7 8 9 10Query 1 3Add 3 6Query 2 7Sub 10 2Add 6 3Query 3 10End Case 1:63359 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue>

【区间合并线段树】BZOJ1593-安排住宿

[题目大意] 查询最左端的连续长度区间:或批量修改一些区间.[思路] 区间合并线段树……复习一下.POJ上有一样的题目,我居然还借用了别人的权限号去做BZOJ,简直愚昧到没朋友[笑cry] 处理方法以前的博文里有,这里有不赘述了. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cstdlib> 6 using

【bzoj4966】总统选举 随机化+线段树

题目描述 黑恶势力的反攻计划被小C成功摧毁,黑恶势力只好投降.秋之国的人民解放了,举国欢庆.此时,原秋之国总统因没能守护好国土,申请辞职,并请秋之国人民的大救星小C钦定下一任.作为一名民主人士,小C决定举行全民大选来决定下一任.为了使最后成为总统的人得到绝大多数人认同,小C认为,一个人必须获得超过全部人总数的一半的票数才能成为总统.如果不存在符合条件的候选人,小C只好自己来当临时大总统.为了尽可能避免这种情况,小C决定先进行几次小规模预选,根据预选的情况,选民可以重新决定自己选票的去向.由于秋之

UESTC #1919 一棵复杂的线段树

Description 给一个\(1 \sim n\)的排列,进行\(m\)次操作,可以将一个区间\([l,r]\)内的数升序排序或者降序排序,最后进行一次询问问第\(k\)个数字为多少. Solution 二分答案,对于每一个二分的值\(x\),将原排列中小于等于\(x\)的数视为\(0\),大于\(x\)的树视为\(1\),用线段树维护,排序操作可以用线段树的区间赋值实现. Code /* Author: LargeDumpling Email: [email protected] Edit