分块,全TLE,求调
查看原帖
分块,全TLE,求调
1218495
YZren楼主2024/12/24 18:39

记录

#include<bits/stdc++.h>
#define int long long 
#define N 100010
using namespace std;
int t,l[N],r[N],ma[N],maxn[N],cnt=1,wsx=1;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
struct node{
	int val,id;
};
inline int structism(int x){
	int ans=0,u=0;
	while(x%10==0) x/=10;
	if(x%10==5) u=1;
	while(x){
		x/=10;
		ans++;
	}
	return ans*2-u;
}
inline node inquire(int x,int y){
	int p=x/10000+1,q=y/10000+1;
	if(p==q){
		if(ma[p]>=x&&ma[p]<=y) return {ma[p],maxn[p]};
		int sum=30,ans;
		for(int i=x;i<=y;i++){
			int jg=structism(i);
			if(sum>jg){
				sum=jg;
				ans=i;
			}
		}
		return {ans,sum};
	}
	node ans=inquire(x,r[p]);
	for(int i=p+1;i<=q-1;i++){
		if(ans.id>maxn[i]){
			ans.id=maxn[i];
			ans.val=ma[i];
		}
	}
	node sum=inquire(l[q],y);
	if(sum.id<ans.id) return sum;
	return ans;
}
signed main(){
	cin.tie()->sync_with_stdio(0);
	cin>>t;
	l[cnt]=1;
	r[cnt]=9999;
	ma[cnt]=5;
	maxn[cnt]=1;
	while(cnt<=N-8){
		cnt++;
		l[cnt]=10000*(cnt-1);
		r[cnt]=l[cnt]+9999;
		ma[cnt]=l[cnt];
		maxn[cnt]=structism(l[cnt]);
	}
	while(t--){
		int le=read(),ri=read();
		node v=inquire(le,ri);
		cout<<v.val<<endl;
	}
	return 0;
}
2024/12/24 18:39
加载中...