性!感!代!码!在!线!求!调!
查看原帖
性!感!代!码!在!线!求!调!
575755
nopic楼主2023/3/14 19:56
#include <bits/stdc++.h>
using namespace std;
const int M=200005;
struct node {
	int mmin=0;
	int sum=0;
	int mmax=0;
	int l,r;
} tree[M*4];
int n,m,input[M],mod,cnt;
void build(int now,int l,int r) {
	tree[now].l=l;
	tree[now].r=r;
	if(l==r) {
		tree[now].sum=0;
		tree[now].mmax=0;
		tree[now].mmin=0;
		return;
	}
	int mid=(l+r)>>1;
	build(now*2,l,mid);
	build(now*2+1,mid+1,r);
	tree[now].sum=tree[now*2].sum+tree[now*2+1].sum;
	tree[now].mmax=max(tree[now*2].mmax,tree[now*2+1].mmax);
}
int p=0;
void update(int now,int tar,int k) {
	
	if(tree[now].l==tree[now].r) {
		tree[now].mmax=k;
		p=now;
		cout<<p<<"  p   "<<tree[p].mmax<<"       nmb     "<<endl;
		
		return;
	}
	cout<<p<<"   p    "<<endl;
	cout<<tree[now].mmax<<"  "<<tree[p].mmax<<endl<<endl;
	if(tar<=tree[now*2].r)
		update(now*2,tar,k);
	else
		update(now*2+1,tar,k);
	tree[now].mmax=max(tree[now*2].mmax,tree[now*2+1].mmax);
}
int query(int now,int l,int r) {
	if(tree[now].l>=l && tree[now].r<=r)
		return tree[now].mmax;
	if(tree[now].r<l || tree[now].l>r)
		return 0;
	int s=(tree[now].r+tree[now].l)>>1;
	return max(query(now*2+1,tree[now].l,tree[now].r),query(now*2,tree[now].l,s));
}
int main() {
	cin>>m>>mod;
	char z;
	int t=0,cnt=0;
	build(1,1,m);
	for(int i=1,x; i<=m; i++) {
		cin>>z>>x;
		if(z=='A') {
//			input[++cnt]=(x+t)%mod;
//			cout<<input[cnt]<<' '<<t<<endl<<endl;
//			build(1,1,cnt);
			cnt++;
			update(1,cnt,(x+t)%mod);
			cout<<p<<"    p     "<<endl;
			cout<<tree[p].l<<" "<<tree[p].r<<endl;
//			cout<<(x+t)%mod<<' '<<tree[cnt].mmax<<" ";
//			cout<<query(1,cnt,cnt)<<endl<<endl;
		} else {
			cout<<cnt<<" "<<x<<endl;
			cout<<tree[9].l<<"      "<<tree[9].r<<"    "<<tree[9].mmax<<endl;
			t=query(1,cnt-x+1,cnt);
			cout<<t<<endl;
		}
	}
	return 0;
}

调了三天了!! 求解!!

2023/3/14 19:56
加载中...