键盘敲碎夜深沉,代码如麻乱假真 • 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;
}
评论:
请先登录,才能进行评论