42 分求助
查看原帖
42 分求助
551428
tomby_gz楼主2024/9/15 15:25

rt,调一天力。

数组开大貌似没用。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2004;
const int T=34;
ll R,C,m,nx,ny,e[N][N],to[N][N];
ll f[N][T],tree[N<<4][N];
string op;
void push_up(ll p){
	for(int i=1;i<=R;i++){
		tree[p][i]=tree[p<<1|1][tree[p<<1][i]];
	}
}
void Build_Tree(ll p,ll l,ll r){
	if(l==r){
		for(int i=1;i<=R;i++){
			tree[p][i]=to[l][i];
		}
		return;
	}
	ll mid=(l+r)>>1;
	Build_Tree(p<<1,l,mid);
	Build_Tree(p<<1|1,mid+1,r);
	push_up(p);
}
void update(ll q,ll p,ll l,ll r){
	if(l==r){
		for(int i=1;i<=R;i++){
			tree[p][i]=to[l][i];
		}
		return;
	}
	ll mid=(l+r)>>1;
	if(q<=mid){
		update(q,p<<1,l,mid);
	}else{
		update(q,p<<1|1,mid+1,r);
	}
	push_up(p);
}
void Find_Next(ll &x,ll &y){
	ll tx1=x>1?x-1:R;
	ll tx2=x;
	ll tx3=x==R?1:x+1;
	ll ty=y==C?1:y+1;
	ll maxn=0,id;
	if(e[tx1][ty]>maxn){
		maxn=e[tx1][ty];
		id=tx1;
	}
	if(e[tx2][ty]>maxn){
		maxn=e[tx2][ty];
		id=tx2;
	}
	if(e[tx3][ty]>maxn){
		maxn=e[tx3][ty];
		id=tx3;
	}
	x=id;
	y=ty;
}
void Binary_Lifting(){
	for(int i=1;i<=R;i++){
		f[i][0]=tree[1][i];
	}
	for(int j=1;j<=30;j++){
		for(int i=1;i<=R;i++){
			f[i][j]=f[f[i][j-1]][j-1];
		}
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>R>>C;
	for(int i=1;i<=R;i++){
		for(int j=1;j<=C;j++){
			cin>>e[i][j];
		}
	}
	for(int i=1;i<=R;i++){
		for(int j=1;j<=C;j++){
			ll x=i,y=j;
			Find_Next(x,y);
			to[j][i]=x;
		}
	}
	Build_Tree(1,1,C);
	Binary_Lifting();
	nx=ny=1;
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>op;
		if(op[0]=='c'){
			ll a,b,k;
			cin>>a>>b>>k;
			e[a][b]=k;
			b=b>1?b-1:C;
			for(int j=1;j<=R;j++){
				ll x=j,y=b;
				Find_Next(x,y);
				to[b][j]=x;
			}
			update(b,1,1,C);
			Binary_Lifting();
		}else{
			ll k;
			cin>>k;
			if(k&&ny!=1){
				Find_Next(nx,ny);
				k--;
			}
			ll c=k/C;
			k%=C;
			for(int j=30;j>=0;j--){
				if(c&(1<<j)){
					c^=(1<<j);
					nx=f[nx][j];
				}
			}
			while(k--){
				Find_Next(nx,ny);
			}
			cout<<nx<<' '<<ny<<'\n';
		}
	}
}
2024/9/15 15:25
加载中...