玄一关
查看原帖
玄一关
1394532
_FJ_楼主2024/8/26 20:39

hhh

#include<bits/stdc++.h>
using namespace std;
int d[100010],c[100010];
int f[100010][25],g[100010][25];
int s[100010];
int n,q;
int main(){
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++)
		scanf("%d%d",&d[i],&c[i]);
	d[n+1]=c[n+1]=1<<28;
	int tot=0;
	for(int i=1;i<=n+1;i++){
		while(tot&&d[i]>d[s[tot]])
			f[tot][0]=i,
			g[tot][0]=c[i],
			tot--;
		s[++tot]=i;
	}
	for(int t=1;t<=18;t++)
		for(int i=1;i<=n;i++)
			f[i][t]=f[f[i][t-1]][t-1],          
			g[i][t]=g[i][t-1]+g[f[i][t-1]][t-1];
	while(q--){
		int r,v;
		scanf("%d%d",&r,&v);
		if(v>c[r]){
			v-=c[r];
			for(int t=18;t>=0;t--)
				if(v>g[r][t])
					v-=g[r][t],
					r=f[r][t];
			r=f[r][0];
		}
		if(r==n+1)
			r=0;
		printf("%d\n",r);
	}
    return 0;
}
2024/8/26 20:39
加载中...