栈外题求调
  • 板块学术版
  • 楼主hmya
  • 当前回复14
  • 已保存回复14
  • 发布时间2021/11/27 20:42
  • 上次更新2023/11/3 23:25:38
查看原帖
栈外题求调
264490
hmya楼主2021/11/27 20:42

link

#include<bits/stdc++.h>
using namespace std;
int n;
int a[50005];
int b[50005];
int block;
int st[50005],ed[50005];
int tag[50005];
int bl[50005];
int find(int x) {
	return bl[x];
}
int ef(int lt,int rt,int val){
	lt--;
	rt++;
	while(lt+1<rt){
		int mid=lt+rt>>1;
		if(b[mid]+tag[bl[mid]]<=val){
			lt=mid;
		}
		else{
			rt=mid;
		}
	}
	return lt;
}
void update(int lt,int rt,int val) {
	int tmp1=find(lt);
	int tmp2=find(rt);
	if(tmp1==tmp2) {
		for(int i=lt; i<=rt; i++) {
			a[i]+=val;
		}
		for(int i=st[tmp1]; i<=ed[tmp1]; i++) {
			b[i]=a[i];
		}
		sort(b+st[tmp1],b+ed[tmp1]+1);
		return;
	}
	for(int i=tmp1+1; i<tmp2; i++) {
		tag[i]+=val;
	}
	for(int i=lt; i<=ed[tmp1]; i++) {
		a[i]+=val;
	}
	for(int i=st[tmp1]; i<=ed[tmp1]; i++) {
		b[i]=a[i];
	}
	sort(b+st[tmp1],b+ed[tmp1]+1);
	for(int i=st[tmp2]; i<=rt; i++) {
		a[i]+=val;
	}
	for(int i=st[tmp2]; i<=ed[tmp2]; i++) {
		b[i]=a[i];
	}
	sort(b+st[tmp2],b+ed[tmp2]+1);
	return;
}
void query(int lt,int rt,int val){
	int tmp1=find(lt);
	int tmp2=find(rt);
	if(tmp1==tmp2){
		printf("%d\n",ef(lt,rt,val)-lt+1);
		return;
	}
	int sum=0;
	for(int i=tmp1+1;i<tmp2;i++){
		sum+=ef(st[i],ed[i],val)-st[i]+1;
	}
	for(int i=lt;i<=ed[tmp1];i++){
		if(b[i]>val){
			break;
		}
		sum++;
	}
	for(int i=st[tmp2];i<=rt;i++){
		if(b[i]>val){
			break;
		}
		sum++;
	}
	printf("%d\n",sum);
	return;
}
int main() {
	scanf("%d",&n);
	for(int i=1; i<=n; i++) {
		scanf("%d",&a[i]);
		b[i]=a[i];
	}
	block=sqrt(n);
	for(int i=1; i<=block; i++) {
		st[i]=ed[i-1]+1;
		ed[i]=st[i]+block-1;
	}
	if(block*block!=n) {
		block++;
		st[block]=ed[block-1]+1;
		ed[block]=n;
	}
	for(int i=1; i<=block; i++) {
		sort(b+st[i],b+ed[i]+1);
		for(int j=st[i];j<=ed[i];j++){
			bl[j]=i;
		}
	}
	for(int i=1; i<=n; i++) {
		int opt;
		scanf("%d",&opt);
		int lt,rt,val;
		scanf("%d%d%d",&lt,&rt,&val);
		if(opt==0) {
			update(lt,rt,val);
		} else {
			query(lt,rt,val*val);
		}
	}
	return 0;
}

去你的我调不出来/fn

帮我调的都是我老父亲嘤嘤嘤

2021/11/27 20:42
加载中...