RE求条
查看原帖
RE求条
927580
zhangxiandong091228楼主2024/10/29 16:22

rt

#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
typedef long long ll;
const ll NR=1e5+5,inf=0x3f3f3f3f;
ll d[NR],c[NR],r,v,b[NR],f[NR][20],vs[NR][20],n,q;
stack<ll> st;
void ddstack()
{
	for(ll i=1;i<=n;i++)
	{
		while(!st.empty()&&d[i]>=d[st.top()])
		{
			f[st.top()][0]=i;
			vs[st.top()][0]=c[i];
			st.pop();
		}
		st.push(i);
	}
	while(!st.empty())
	{
		f[st.top()][0]=0;
		st.pop();
	}
}
ll before_bz()
{
	for(ll j=1;(1<<j)<=n;j++)
	{
		for(ll i=1;i+(1<<j)<=n;i++)
		{
			f[i][j]=f[f[i][j-1]][j-1];
			vs[i][j]=vs[i][j-1]+vs[f[i][j-1]][j-1];
		}
	}
}
ll bz(ll from,ll val)
{
	if(c[from]>=val)
	{
		return from;
	}
	val-=c[from];
	ll op=18;
	while(op>=0)
	{
		if(f[from][op]!=0&&val>vs[from][op])
		{
			val-=vs[from][op];
			from=f[from][op];
		}
		op--;
	}
	return f[from][0];
}
int main()
{
	memset(vs,inf,sizeof(vs));
	cin>>n>>q;
	for(ll i=1;i<=n;i++)
		cin>>d[i]>>c[i];
	ddstack();
	before_bz();
	while(q--)
	{
		cin>>r>>v;
		cout<<bz(r,v)<<endl;
	}
	return 0;
}

本蒟蒻测样例没问题(悲

提交之后全RE

求大佬指点%%%

2024/10/29 16:22
加载中...