SOS,玄关。
查看原帖
SOS,玄关。
1239363
Huoxiangji楼主2024/10/2 12:55
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct pairs{
	ll num,sum;
}a[100010];
int best=1;
int half_search(int l,int r,ll x){
	if(l>r)return best;
	int mid=(r-l)/2+l;
	if(a[mid].num==x)
		return mid;
	if(a[mid].num<x)
		best=mid+1;
		return half_search(l,mid-1,x);
	if(a[mid].num>x){
		return half_search(mid+1,r,x);
	}
}
ll max(ll x,int y){
	return x>=y?x:y;
}
int main(){
	int n;scanf("%d",&n);
	int op,tot=0;
	ll x,y;
	for(int i=1;i<=n;i++){
		scanf("%d",&op);
		if(op==1){
			scanf("%lld%lld",&x,&y);
			int node=half_search(1,tot,x);
			if(a[node].num==x)a[node].sum+=y;
			else{
				//printf("node=%d\n",node);
				for(int j=tot;j>=node;j--){
					a[j+1].num=a[j].num;
					a[j+1].sum=a[j].sum;
				}
				tot++;
				a[node].num=x;a[node].sum=y;
			}
		}else if(op==2){
			scanf("%lld%lld",&x,&y);
			int node=half_search(1,tot,x);
			if(a[node].num==x)a[node].sum=max(a[node].sum-y,0);
		}else if(op==3){
			for(int i=1;i<=tot;i++)
				if(a[i].sum!=0)
					a[i].sum=1;
		}else{
			scanf("%lld",&x);
			int node=half_search(1,tot,x);
			if(a[node].num==x)printf("%lld\n",a[node].sum);
			else printf("0\n");
		}
		//printf("tot=%d\n",tot);
		//for(int i=1;i<=tot;i++)
		//	printf("num%d=%d sum%d=%d\n",i,a[i].num,i,a[i].sum);
	}
	return 0;
}

3个AC,n个WA,5个TLE。 求救大佬。

2024/10/2 12:55
加载中...