AC

键盘敲碎夜深沉,代码如麻乱假真  •  6天前


/*
           ▃▆█▇▄
       ▟◤▖     ◥█  
   ◢◤    ◢▐       ▐▉
 ▗◤       ▂ ▗▖  ▕ █▎
 ◤ ▗▅▖ ◥▄  ▀▀▀◣ █▊
▐ ▕▎  ◥▖◣◤    ◢██
█◣ ◥▅█▀       ▐███◤
▐█▙▂         ◢███◤
 ◥██◣     ◢▄◤
   ▀██▅▇▀▎▇

*/
#include<bits/stdc++.h>
using namespace std;
struct treenode{
	long long min;	
}tree[4000005];
long long a[1000005],b[1000005];
void maketree(int node,int left,int right){
	if(left==right){
		tree[node].min=b[left];
		return ;
	}
	int mid=(left+right)/2;
	maketree(node<<1,left,mid);
	maketree(node<<1|1,mid+1,right);
	tree[node].min=min(tree[node<<1].min,tree[node<<1|1].min);
}
void add(int node,int left,int right,int index,int val){
	if(left==right){
		tree[node].min+=val;
		return ;
	}
	int mid=(left+right)/2;
	if(index<=mid) add(node<<1,left,mid,index,val);
	else add(node<<1|1,mid+1,right,index,val);
	tree[node].min=min(tree[node<<1].min,tree[node<<1|1].min);
}
long long query(int node,int left,int right,int ql,int qr){
	if(ql<=left&&right<=qr) return tree[node].min;
	else if(ql>right||qr<left) return 1e9;
	else{
		int mid=(left+right)/2;
		return min(query(node<<1,left,mid,ql,qr),query(node<<1|1,mid+1,right,ql,qr));
	}
}
int main(){
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[i]=a[i]-a[i-1];
	} 	
	maketree(1,1,n);
	for(int i=1;i<=k;i++){
		int opt,l,r,x;
		cin>>opt>>l>>r;
		if(r==n+1) r--;
		if(opt==1){
			cin>>x;
			add(1,1,n,l,x);
			if(r<n) add(1,1,n,r+1,-x);
		}else if(opt==2){
			if(query(1,1,n,l+1,r)>=0) cout<<"114514\n";
			else cout<<"1919810\n";
		}
	}
	return 0;
}


评论:

请先登录,才能进行评论