社区讨论
求条
P14989传送参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mkrocqgf
- 此快照首次捕获于
- 2026/01/24 10:12 4 周前
- 此快照最后确认于
- 2026/01/24 17:52 4 周前
CPP
// Gavinzhou's code
#include<bits/stdc++.h>
using namespace std;
//#define LOCAL
#define in freopen("xx.in","r",stdin)
#define out freopen("xx.out","w",stdout)
//#define int long long
#define endl '\n'
#define FastIO std::ios::sync_with_stdio(false);cin.tie(0);
#define fi first
#define se second
#define dis(x1,y1,x2,y2) (sqrt(abs(x1-x2)*abs(x1-x2)+abs(y1-y2)*abs(y1-y2)))
#define pb push_back
using PII=pair<int,int>;
/*--------------------定义变量,函数---------------------------*/
const int N=5e5+5;
int n,q;
int a[N];
vector<int>g[N];
int le[N],ri[N];
int dep[N],f[N][32];
/*-----------------------解决函数--------------------------*/
void dfs(int u,int pre){
f[u][0]=pre;
dep[u]=dep[pre]+1;
for(int i=1;i<=30;i++){
f[u][i]=f[f[u][i-1]][i-1];
}
for(int i:g[u]){
if(i!=pre) dfs(i,u);
}
}
inline int lca(int a,int b){
if(dep[a]>dep[b]) swap(a,b);
for(int i=30;i>=0;i--){
if(dep[f[b][i]]>=dep[a]) b=f[b][i];
}
if(a==b) {
return a;
}
for(int i=30;i>=0;i--){
if(f[a][i]!=f[b][i]) a=f[a][i],b=f[b][i];
}
return f[a][0];
}
void solve(){
cin>>n>>q;
int ma=0,start=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(ma<a[i]){
ma=a[i];
start=i;
}
}
stack<int>st1,st2;
for(int i=1;i<=n;i++){
while(!st1.empty()&&a[st1.top()]<=a[i]){
st1.pop();
}
if(!st1.empty()){
le[i]=st1.top();
}else{
le[i]=i;
}
st1.push(i);
}
for(int i=n;i>=1;i--){
while(!st2.empty()&&a[st2.top()]<=a[i]){
st2.pop();
}
if(!st2.empty()){
ri[i]=st2.top();
}else{
ri[i]=i;
}
st2.push(i);
}
for(int i=1;i<=n;i++){
if(le[i]>ri[i]){
g[le[i]].pb(i);
g[i].pb(le[i]);
}else{
g[i].pb(ri[i]);
g[ri[i]].pb(i);
}
}
dfs(start,0);
while(q--){
int k;
cin>>k;
int LCA=-1;
while(k--){
int x;
cin>>x;
if(LCA==-1) LCA=x;
else LCA=lca(LCA,x);
}
cout<<dep[LCA]<<endl;
}
}
/*------------------------------------------------------*/
signed main(){
FastIO
#ifdef LOCAL
in;
out;
#endif
int t;
t=1;
while(t--){
solve();
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...