求助!无法通过样例!
  • 板块P2412 查单词
  • 楼主LITFLYR
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/17 14:51
  • 上次更新2024/8/17 17:15:40
查看原帖
求助!无法通过样例!
909957
LITFLYR楼主2024/8/17 14:51
#include<bits/stdc++.h>
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
using namespace std;
string min(string a,string b){
	return a<b?a:b;
}
struct tr{
	string len;
	string k;
}tre[200005];
string s[50010],ans,an,cnt;
void push_up(int f){
	if(tre[ls(f)].k>tre[rs(f)].k){
		tre[f].k=tre[ls(f)].k;
		tre[f].len=tre[ls(f)].len;
	}
	else{
		tre[f].k=tre[rs(f)].k;
		tre[f].len=tre[rs(f)].len;
	}
}
void build(int f,int l,int r){
	if(l==r){
		tre[f].k=s[f];
		for(int i=0;i<tre[f].k.length();i++) tre[f].k[i]=tolower(tre[f].k[i]);
		an=min(an,tre[f].k);
		tre[f].len=s[f]; 
		return ;
	}
	int mid=(l+r)>>1;
	build(ls(f),l,mid);
	build(rs(f),mid+1,r);
	push_up(f);
}
void query(int f,int l,int r,int x,int y){
	if(x<=l&&r<=y){
		if(tre[f].k>an){
			an=tre[f].k;
			ans=tre[f].len;
			cout<<l<<" "<<r<<endl;
		}
		return ;
	}
	int mid=(l+r)>>1;
	if(x<=mid) query(ls(f),l,mid,x,y);
	if(y>mid) query(rs(f),mid+1,r,x,y);
}
int n,m,x,y;
int main(){
	cin >> n >> m;
	for(int i=1;i<=n;i++){
		cin >> s[i];
	}
	build(1,1,n);
	cnt=an;
//	cout << "tips: " << cnt << endl;
	for(int i=1;i<=m;i++){
		cin >> x >> y;
		an=cnt;
		query(1,1,n,x,y);
		cout << ans << endl;
	}
	return 0;
} 
2024/8/17 14:51
加载中...