分块球条,悬棺
  • 板块学术版
  • 楼主yangduan_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/23 15:29
  • 上次更新2024/7/23 16:14:07
查看原帖
分块球条,悬棺
983684
yangduan_楼主2024/7/23 15:29

T255356 简单的问题(easy)

#include<bits/stdc++.h>
using namespace std;
#define N 210000
#define ll long long
struct node{
	ll l,r;
	ll tag=0;
	ll numj=0,numo=0;//奇数的个数  偶数的个数 
	ll maxj=0,maxo=0;//最大的奇数,最大的偶数 
}kuai[2020];
ll n,q,a[N],op,x,y,k;
ll belong[N],len,cnt;
void jia(ll x,ll y,ll k){
	ll i,j;
	ll kx=belong[x],ky=belong[y];
	if(kx==ky){
		for(i=x;i<=y;i++) a[i]+=k;
		kuai[kx].numj=kuai[kx].numo=0;
		kuai[kx].maxj=kuai[kx].maxo=0;//清零
		for(i=kuai[kx].l;i<=kuai[kx].r;i++){
			a[i]+=kuai[kx].tag;
			if(a[i]%2ll){
				kuai[kx].numj++;
				kuai[kx].maxj=max(kuai[kx].maxj,a[i]);
			}else{
				kuai[kx].numo++;
				kuai[kx].maxo=max(kuai[kx].maxo,a[i]);
			}
		}
		kuai[kx].tag=0;
	}else{
		for(i=kx+1;i<=ky-1;i++){//中 
			if(kuai[i].numj) kuai[i].maxj+=k;//判断是否存在 
			if(kuai[i].numo) kuai[i].maxo+=k;
			if(k%2ll){
				swap(kuai[i].numj,kuai[i].numo);
				swap(kuai[i].maxj,kuai[i].maxo);
			}
			kuai[i].tag+=k;
		}
		for(i=x;i<=kuai[kx].r;i++) a[i]+=k;//left
		for(i=kuai[ky].l;i<=y;i++) a[i]+=k;//right
		kuai[kx].numj=kuai[kx].numo=0;//清零左右两个区间 
		kuai[kx].maxj=kuai[kx].maxo=0;
		kuai[ky].numj=kuai[ky].numo=0;
		kuai[ky].maxj=kuai[ky].maxo=0;
		for(i=kuai[kx].l;i<=kuai[kx].r;i++){//l
			a[i]+=kuai[kx].tag;
			if(a[i]%2ll){
				kuai[kx].maxj=max(kuai[kx].maxj,a[i]);
				kuai[kx].numj++;
			}else{
				kuai[kx].maxo=max(kuai[kx].maxo,a[i]);
				kuai[kx].numo++;
			}
		}
		kuai[kx].tag=0;
		for(i=kuai[ky].l;i<=kuai[ky].r;i++){//r
			a[i]+=kuai[ky].tag;
			if(a[i]%2ll){
				kuai[ky].maxj=max(kuai[ky].maxj,a[i]);
				kuai[ky].numj++;
			}else{
				kuai[ky].maxo=max(kuai[ky].maxo,a[i]);
				kuai[ky].numo++;
			}
		}
		kuai[ky].tag=0;
	}
}
void find(ll x,ll y){
	ll i,j;
	ll kx=belong[x],ky=belong[y];
	ll ansn=0,ansm=0;//奇数数量   最大奇数 
	if(kx==ky){
		for(i=x;i<=y;i++){
			if((a[i]+kuai[kx].tag)%2ll){
				ansn++;
				ansm=max(ansm,a[i]+kuai[kx].tag);
			}
		}
		return ;
	}else{
		for(i=kx+1;i<=ky-1;i++){//middle 
			ansn+=kuai[i].numj;
			ansm=max(ansm,kuai[i].maxj);
		}
		for(i=x;i<=kuai[kx].r;i++){//left 
			if((a[i]+kuai[kx].tag)%2ll){
				ansn++;
				ansm=max(ansm,a[i]+kuai[kx].tag);
			} 
		}
		for(i=kuai[ky].l;i<=y;i++){//right
			if((a[i]+kuai[ky].tag)%2ll){
				ansn++;
				ansm=max(ansm,a[i]+kuai[ky].tag);
			}
		}
	}
	cout<<ansn<<" "<<ansm<<endl;
}
int main(){
	int i,j;
	cin>>n;
	for(i=1;i<=n;i++){
		cin>>a[i];
	}
	len=sqrt(n);
	cnt=0;
	for(i=1;i<=n;i++){
		belong[i]=(i-1)/len+1;
		if((i-1)%len==0) kuai[++cnt].l=i;
		if(i%len==0) kuai[cnt].r=i;
		int bx=belong[i];
		if(a[i]%2ll){
			kuai[bx].maxj=max(kuai[bx].maxj,a[i]);
			kuai[bx].numj++;
		}else{
			kuai[bx].maxo=max(kuai[bx].maxo,a[i]);
			kuai[bx].numo++;
		}
	}
	cin>>q;
	for(i=1;i<=q;i++){
		cin>>op>>x>>y;
		if(op==2){
			cin>>k;
			jia(x,y,k);
		}else{
			find(x,y);
		}
	}
	return 0;
}

救救孩子吧

2024/7/23 15:29
加载中...