求助各位大佬!!灵异事件,悬2关
  • 板块灌水区
  • 楼主linjinkun
  • 当前回复17
  • 已保存回复17
  • 发布时间2024/12/18 20:16
  • 上次更新2024/12/19 08:48:03
查看原帖
求助各位大佬!!灵异事件,悬2关
1120828
linjinkun楼主2024/12/18 20:16

此题 我对着第一篇题解写,结果死活过不了样例,怎么回事!!??求求了!!

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e7+5;
struct node
{
	int ls;
	int rs;
	int sum;
}t[N];
int a[N];
int b[N];
int cnt;
int rt[N];
int jianshu(int l,int r)
{
	int o = ++cnt;
	if(l == r)
	{
		return o;
	}
	int mid = l+r>>1;
	t[o].ls = jianshu(l,mid);
	t[o].rs = jianshu(mid+1,r);
	return o;
}
int add(int rt,int l,int r,int x)
{
	int o = ++cnt;
	t[o] = t[rt];
	t[o].sum++;
	if(l == r)
	{
		return o;
	}
	int mid = (l+r)>>1;
	if(x<=mid)
	{
		t[o].ls = add(t[rt].ls,l,mid,x);
	}
	else
	{
		t[o].rs = add(t[rt].rs,mid+1,r,x);
	}
	return o;
}
int ask(int o,int rt,int l,int r,int k)
{
	if(l == r)
	{
		return l;
	}
	int mid = l+r>>1,x = t[t[o].ls].sum-t[t[rt].ls].sum;
	if(x>=k)
	{
		return ask(t[o].ls,t[rt].rs,l,mid,k);
	}
	else
	{
		return ask(t[o].rs,t[rt].rs,mid+1,r,k-x);
	}
}
int main()
{
	int n,_;
	scanf("%d %d",&n,&_);
	for(int i = 1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		b[i] = a[i];
	}
	sort(b+1,b+n+1);
	int m = unique(b+1,b+n+1)-b-1;
	rt[0] = jianshu(1,m);
	for(int i = 1;i<=n;i++)
	{
		int s = lower_bound(b+1,b+m+1,a[i])-b;
		rt[i] = add(rt[i-1],1,m,s);
	}
	while(_--)
	{
		int l,r,k;
		scanf("%d %d %d",&l,&r,&k);
		int t = ask(rt[r],rt[l-1],1,m,k);
		printf("%d\n",b[t]);
	}
	return 0;
}
2024/12/18 20:16
加载中...