题解 | Removing Stones-2019牛客暑期多校训练营第三场G题

题目来源于牛客竞赛:https://ac.nowcoder.com/acm/contest/discuss
题目描述:
题解 | Removing Stones-2019牛客暑期多校训练营第三场G题_第1张图片
输入描述:
题解 | Removing Stones-2019牛客暑期多校训练营第三场G题_第2张图片
输出描述:
在这里插入图片描述
示例1:
题解 | Removing Stones-2019牛客暑期多校训练营第三场G题_第3张图片
题解:
题解 | Removing Stones-2019牛客暑期多校训练营第三场G题_第4张图片
代码:

#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int N=610001;
ll s[N],ans;
int i,j,k,n,m,a[N],rmq[21][N],tests,lg[N];
void rmqinit(){
	int i,j,k;
	for (m=0;(1<a[rmq[i-1][j+k]])?rmq[i-1][j]:rmq[i-1][j+k];
}
int rmqquery(int l,int r){
	int k=lg[r-l+1];
	return (a[rmq[k][l]]>a[rmq[k][r-(1<>1;
		if (s[m]>=v) r=m;else l=m+1;
	}
	return (s[l]>=v)?l:r;
}
int bs2(int l,int r,ll v){
	int m;
	if (s[l-1]>v) return l-1;
	while (l>1;
		if (s[m-1]<=v) l=m;else r=m-1;
	}
	return (s[r-1]<=v)?r:l;
}
void work(int l,int r){
	int i,j,k;
	if (r-l+1<=1) return;
	if (r-l+1==2){
		if (a[l]==a[r]) ans++;
		return;
	}
	k=rmqquery(l,r);
	if (k-l

更多问题,更详细题解可关注牛客竞赛区,一个刷题、比赛、分享的社区。
传送门:https://ac.nowcoder.com/acm/contest/discuss

你可能感兴趣的:(题解)