借教室,洛谷之提高历练地,暴力??差分

正题

      借教室

      我们每加入一个区间,就将这个区间都加上dj,没错,我们只要看一下当前点的权值是否大于ri即可。

      lazy优化+读入优化强行卡过

// luogu-judger-enable-o2
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;

int n,m;
struct tree{
    int ls,rs,x,y;
    long long min,lazy;
}s[2000010];
int r[1000010];
int len=0;

/*inline char nc() {
    static char buf[1000000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
}*/
inline int read(int &sum) {
    char ch=getchar();
    sum=0;
    while(!(ch>='0'&&ch<='9'))
        ch=getchar();
    while(ch>='0'&&ch<='9')
        sum=(sum<<3)+(sum<<1)+(ch^48),ch=getchar();
    return sum;
}

void bt(int x,int y){
    len++;
    int i=len;
    s[i].ls=s[i].rs=-1;
    s[i].x=x;s[i].y=y;
    s[i].min=0;s[i].lazy=0;
    if(x==y) return ;
    int mid=(x+y)/2;
    s[i].ls=len+1;bt(x,mid);
    s[i].rs=len+1;bt(mid+1,y);
}

void pushdown(int x){
    int ls=s[x].ls,rs=s[x].rs;
    if(s[ls].ls==-1 && s[ls].rs==-1) s[ls].min+=s[x].lazy;
    else s[ls].lazy+=s[x].lazy,s[ls].min+=s[x].lazy;
    if(s[rs].ls==-1 && s[rs].rs==-1) s[rs].min+=s[x].lazy;
    else s[rs].lazy+=s[x].lazy,s[rs].min+=s[x].lazy;
    s[x].lazy=0;
}

bool change(int p,int x,int y,int d){
    if(s[p].ls==-1 && s[p].rs==-1){
        s[p].min+=d;
        return s[p].min>=0?true:false;
    }
    if(s[p].x==x && s[p].y==y){
        s[p].lazy+=d;
        s[p].min+=d;
        return s[p].min>=0?true:false;
    }
    pushdown(p);
    int mid=s[s[p].ls].y;
    if(y<=mid) change(s[p].ls,x,y,d);
    else if(x>mid) change(s[p].rs,x,y,d);
    else change(s[p].ls,x,mid,d),change(s[p].rs,mid+1,y,d);
    s[p].min=min(s[s[p].ls].min,s[s[p].rs].min);
    return s[p].min>=0?true:false;
}

int main(){
    read(n);
    read(m);
    bt(1,n);
    for(int i=1;i<=n;i++){
        int x;
        read(x);
        change(1,i,i,x);
    }
    for(int i=1;i<=m;i++){
        int d,x,y;
        read(d);
        read(x);
        read(y);
        if(!change(1,x,y,-d)) {
            printf("-1\n%d",i);
            return 0;
        }
    }
    printf("0");
}

另一种做法就是差分,这个做法很像树状数组该段求点。

有一个差分数组diff来表示当前这个与前一个值的差,那么我们要求其中的一个值,就直接算前缀和即可。

改段自然也就变得很简单,diff[i]+=d相当于原数组的i到n都加上d。

那如果我们要在x到y都加上d,那么直接在diff[x]+=d,diff[y+1]-=d即可。

#include<cstdio>
#include<cstdlib>
#include<cstring>

int chafen[1000010];
int r[1000010];
int n,m;
struct node{
	int x,y,d;
}s[1000010];

bool check(int x){
	memset(chafen,0,sizeof(chafen));
	for(int i=1;i<=x;i++){
		chafen[s[i].x]+=s[i].d;
		chafen[s[i].y+1]-=s[i].d;
	}
	int tot=0;
	for(int i=1;i<=n;i++){
		tot+=chafen[i];
		if(tot>r[i]) return false;
	}
	return true;
}

int main(){
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&r[i]);
	for(int i=1;i<=m;i++) scanf("%d %d %d",&s[i].d,&s[i].x,&s[i].y);
	int l=0,r=m;
	int ans=0;
	while(l<=r){
		int mid=(l+r)/2;
		if(check(mid)){
			ans=mid+1;
			l=mid+1;
		}
		else r=mid-1;
	}
	if(ans==m+1) printf("0");
	else printf("-1\n%d",ans);
}


在专利代理实习过程中,高效掌握短期意外险与车险业务流程,并提升客户服务技能,是每一个实习生面临的重要挑战。《暑期专利代理实习心得:专业融合与职场历练》这本书将为你提供宝贵的经验和方法。以下是具体的行动指南和建议: 参考资源链接:[暑期专利代理实习心得:专业融合与职场历练](https://wenku.youkuaiyun.com/doc/48g60b4s4z?spm=1055.2569.3001.10343) 一、了解保险产品基础知识:首先,你需要对短期意外险和车险有一个全面的认识,包括产品类型、保险公司、保障额度等。实习期间,可以通过阅读保险条款、参与产品培训、以及咨询经验丰富的同事来迅速获取这些信息。 二、业务流程的实践学习:实际操作是掌握业务流程的最佳方式。在卡单部,通过实际填写保单、核对信息,可以熟悉短期意外险的业务流程。在车险部,通过参与算费过程、学习保险公司的操作规范和参与新员工培训,可以快速理解车险的算费技巧和业务操作。 三、客户服务技能的培养:客户服务不仅要求熟悉产品,还需要良好的交流技巧。在与客户的接触中,要学会控制情绪、耐心倾听和准确传达信息。可以通过观察同事的服务方式,或参与角色扮演等模拟训练来提升自己的交流艺术。 四、总结经验并制定个人成长计划:实习结束时,回顾自己在实习期间的经历和成就,总结学习到的技能和知识,并结合自己的职业兴趣和市场需求,制定未来的职业规划。 通过上述方法,你可以快速地熟悉短期意外险和车险的业务流程,同时提升客户服务技能。建议实习结束后,继续阅读《暑期专利代理实习心得:专业融合与职场历练》等类似资料,以更深入地理解和运用在实习中学到的知识和技能,为未来的职业生涯打下坚实的基础。 参考资源链接:[暑期专利代理实习心得:专业融合与职场历练](https://wenku.youkuaiyun.com/doc/48g60b4s4z?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值