zoukankan      html  css  js  c++  java
  • P1083 借教室

    蒟蒻刚学了线段树的最最最最最嘴醉罪咀基本的东西,看什么题都想用线段树

    题目链接

    P1083 借教室

    思路

    如果不会线段树请点这里

    题目中说的是求第一个不满足的申请人

    我们可以把借教室的操作看成线段树的区间修改,把要借的教室数量(d)看成修改的值的相反数,然后我们记录一下区间的最小值就行了,如果进行区间修改操作后,最小值已经小于0就可以输出了

    代码

    #prag
    ma GCC optimize("Ofast")//请忽略这里
    #include<bits/stdc++.h>
    using namespace std;
    #define int long long int
    inline int read() {
        char c = getchar();
        int x = 0, f = 1;
        while(c < '0' || c > '9') {
            if(c == '-') f = -1;
            c = getchar();
        }
        while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
        return x * f;
    }
    const int N=1000005;
    int n,m,a[N];
    int minn[N*4],lazy[N*4];
    void pushup(int root) {
    	int lson=root<<1;
    	int rson=root<<1|1;
    	minn[root]=min(minn[lson],minn[rson]);
    }
    void build(int root,int l,int r) {//建树 
    	int lson=root<<1;
    	int rson=root<<1|1;
    	if(l==r) {
    		minn[root]=a[l];
    		return ;
    	}
    	int mid=(l+r)/2;
    	build(lson,l,mid);
    	build(rson,mid+1,r);
    	pushup(root);
    }
    void pushdown(int root) {//下放懒标记 
    	int lson=root<<1;
    	int rson=root<<1|1;
    	if(lazy[root]) {
    		minn[lson]+=lazy[root];
    		minn[rson]+=lazy[root];
    		lazy[lson]+=lazy[root];
    		lazy[rson]+=lazy[root];
    		lazy[root]=0;//懒标记一定要清空啊! 
    	}
    }
    void update(int root,int l,int r,int x,int y,int v) {
    	int lson=root<<1;
    	int rson=root<<1|1;
    	if(x<=l&&r<=y) {
    		minn[root]+=v;
    		lazy[root]+=v;
    		return ;
    	}
    	int mid=(l+r)>>1;
    	pushdown(root);
    	if(x<=mid) update(lson,l,mid,x,y,v);
    	if(y>mid) update(rson,mid+1,r,x,y,v);
    	pushup(root);
    }
    signed main() {
    	n=read();
    	m=read();
    	for(int i=1; i<=n; ++i) a[i]=read();
    	build(1,1,n);
    	for(int i=1; i<=m; ++i) {
    		int d,s,t;
    		cin>>d>>s>>t;
    		update(1,1,n,s,t,-d);
    		if(minn[1]<0) {//不能满足请求 
    			printf("-1
    %d",i);
    			return 0;
    		}
    	}
    	cout<<0;
    	return 0;
    }
    
  • 相关阅读:
    NO 3 ,人生苦短,我学python之python 元祖tuple魔法
    NO 2,人生苦短,我学python之python 列表list的魔法
    NO 1,人生苦短,我学python之python 字符串的魔法
    几种常见登录验证的方式总结
    Spring Boot 解决跨域问题的 3 种方案
    浅析VO、DTO、DO、PO的概念、区别和用处
    对于分库分表的入门理解
    在项目启动后执行某段功能代码
    jna编程学习
    RabbitMQ详解
  • 原文地址:https://www.cnblogs.com/pyyyyyy/p/11125269.html
Copyright © 2011-2022 走看看