为什么开 long long会报错
  • 板块学术版
  • 楼主chen_qian
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/3/10 17:52
  • 上次更新2023/11/5 02:14:01
查看原帖
为什么开 long long会报错
128870
chen_qian楼主2021/3/10 17:52
#include<bits/stdc++.h>
#define N 50005
#define mod 100000007
using namespace std;
int n,m;
int a[N],c[N],b[N];
int lazy[N<<2],val1[N<<2],val2[N<<2],tag[N<<2],mul[N<<2];
void push_up(int p){
	if(tag[p<<1]&&tag[p<<1|1]) tag[p]=1;
	mul[p]=(mul[p<<1]*mul[p<<1|1])%mod;
	val1[p]=max(val1[p<<1],val1[p<<1|1]);
	val2[p]=max(val2[p<<1],val2[p<<1|1]);
}
void push_down(int p){
	if(lazy[p]){
		lazy[p<<1]=lazy[p];
		lazy[p<<1|1]=lazy[p];
		val1[p<<1]=lazy[p];
		val1[p<<1|1]=lazy[p];
		lazy[p]=0;
	}
}
void build(int p,int l,int r){
	if(l==r){
		val1[p]=c[l];
		val2[p]=b[l];
		mul[p]=min(b[l],c[l])%mod;
		return ;
	}
	int mid=(l+r)>>1;
	build(p<<1,l,mid);
	build(p<<1|1,mid+1,r);
	push_up(p);
}
void modify1(int p,int l,int r,int x,int v){
	if(l==r){
		val2[p]=x;
		mul[p]=min(val1[p],val2[p]);
		if(val1[p]<val2[p]) tag[p]=0;
		else tag[p]=1;
		return ;
	}
	push_down(p);
	int mid=(l+r)>>1;
	if(x<=mid) modify1(p<<1,l,mid,x,v);
	else modify1(p<<1|1,mid+1,r,x,v);
	push_up(p); 
}
int binary_search(int p,int l,int r,int x){
	if(l==r){
		if(l==1&&val1[p]>=x) return 0;
		else return l;
	}
	push_down(p);
	int mid=(l+r)>>1;
	if(val1[p<<1]<=x) return binary_search(p<<1|1,l,mid,x);
	else return binary_search(p<<1|1,mid+1,r,x);
}
void modify(int p,int l,int r,int ql,int qr,int v){
	if(ql<=l&&qr>=r){
		lazy[p]=v;
		val1[p]=v;
		if(val1[p]<val2[p]) tag[p]=0;
		else tag[p]=1;
		if(tag[p]) return ;
	}
	if(l==r){
		val1[p]=v;
		mul[p]=min(val1[p],val2[p]);
		return ;
	}
	push_down(p);
	int mid=(l+r)>>1;
	if(ql<=mid) modify(p<<1,l,mid,ql,qr,v);
	if(qr>mid) modify(p<<1|1,mid+1,r,ql,qr,v);
	push_up(p);
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=n;i++) cin>>b[i];
	for(int i=1;i<=n;i++) c[i]=max(a[i],c[i-1]);
	build(1,1,n);
	while(m--){
		int op,x,y;
		scanf("%lld%lld%lld",&op,&x,&y);
		if(!op){
			int t=binary_search(1,1,n,y);
			if(t>=x){
				modify(1,1,n,x,t,y);
			}
		}
		else{
			modify1(1,1,n,x,y);
		}
		cout<<mul[1]<<endl;
	}
}

这是我的代码,开了 long long 后就挂了,你们可以自己测一下。

2021/3/10 17:52
加载中...