求助,调不动了……
  • 板块P2412 查单词
  • 楼主osfly
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/3/30 16:35
  • 上次更新2023/10/28 05:10:20
查看原帖
求助,调不动了……
339299
osfly楼主2022/3/30 16:35
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
map<string,int> mp1;
map<int,string> mp2;
string s[60000];
string so[60000];
int a[60000];
int n,m;
struct node
{
	int l,r;
	int val;
};
struct seg
{
	node t[60000*4];
	int max(int a,int b)
	{
		return a>b?a:b; 
	}
	void build(int k,int l,int r)
	{
		t[k].l=l;
		t[k].r=r;
		if(l==r)
		{
			t[k].val=a[l];
			return ;
		}
		int mid=(l+r)>>1;
		build(2*k,l,mid);
		build(2*k+1,mid+1,r);
		t[k].val=max(t[2*k].val,t[2*k+1].val);
	}
	int query(int k,int l,int r)
	{
		if(t[k].l>=l&t[k].r<=r) return t[k].val;
		int mid=(t[k].l+t[k].r)>>1;
		int ans=0;
		if(l<=mid) ans=max(ans,query(2*k,l,r));
		if(r>mid) ans=max(ans,query(2*k+1,l,r));
		return ans;
	}
}tree;
int main()
{
	cin>>n>>m; 
	for(int i=1;i<=n;i++)
	{
		cin>>s[i];
		so[i]=s[i];
	}
	sort(so+1,so+1+n);
	for(int i=1;i<=n;i++)
	{
		mp1[so[i]]=i;
		mp2[i]=so[i];
	}
	for(int i=1;i<=n;i++) a[i]=mp1[s[i]];
	tree.build(1,1,n);
	for(int i=1;i<=m;i++)
	{
		int l,r;
		cin>>l>>r;
		cout<<mp2[tree.query(1,l,r)]<<endl;
	}
	return 0;
}

保龄,全WA,样例能过

2022/3/30 16:35
加载中...