洛谷 P11403 [RMI 2020] 软盘 / Floppy 题解 [复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
人生第一道通讯题!
Solution

由题意得,\(L\) 最大值为 \(2N\)。而标题扣问的是最大值的下标,这启示我们生存关于相对巨细关系的信息。
留意到,区间最值可以转化成笛卡尔树上 LCA。因此只须要传笛卡尔树即可。
思量单调栈创建过程。用 \(0/1\) 表现收支栈,如许就可以重现创建过程,从而唯一确定树的形态。
由于每个点最多收支栈各一次,因此字符串长度 \(\le 2N\)。
Code
  1. #include "floppy.h"
  2. #include <bits/stdc++.h>
  3. #define rep(i,a,b) for(int i(a);i<b;++i)
  4. #define per(i,a,b) for(int i(a);i>b;--i)
  5. #define rept(i,a,b) for(int i(a);i<=b;++i)
  6. #define pert(i,a,b) for(int i(a);i>=b;--i)
  7. #define pb push_back
  8. #define eb emplace_back
  9. using namespace std;
  10. constexpr int N=4e4+5;
  11. int st[N],l[N],r[N],fa[16][N],dep[N];
  12. string s;
  13. void read_array(int subtask_id,const vector<int> &v){
  14.     int n=v.size(),top=0;
  15.     s.clear();
  16.     rep(i,0,n){
  17.         while(top&&v[st[top]]<v[i]) --top,s.pb('0');
  18.         st[++top]=i,s.pb('1');
  19.     }
  20.     save_to_floppy(s);
  21. }
  22. void dfs(int u){
  23.     dep[u]=dep[fa[0][u]]+1;
  24.     rept(i,1,15) fa[i][u]=fa[i-1][fa[i-1][u]];
  25.     if(l[u]) fa[0][l[u]]=u,dfs(l[u]);
  26.     if(r[u]) fa[0][r[u]]=u,dfs(r[u]);
  27. }
  28. int lca(int u,int v){
  29.     if(dep[u]<dep[v]) u^=v^=u^=v;
  30.     int d=dep[u]-dep[v];
  31.     rept(i,0,15) if(d>>i&1) u=fa[i][u];
  32.     if(u==v) return u;
  33.     pert(i,15,0) if(fa[i][u]^fa[i][v]) u=fa[i][u],v=fa[i][v];
  34.     return fa[0][u];
  35. }
  36. vector<int> solve_queries(int subtask_id,int N,const string &bits,const vector<int> &a, const vector<int> &b){
  37.     vector<int> ans;
  38.     int top=0,p=0;
  39.     rept(i,1,N){
  40.         int lst=0;
  41.         while(bits[p]=='0') lst=st[top--],++p;
  42.         if(lst) l[i]=lst;
  43.         if(top) r[st[top]]=i;
  44.         st[++top]=i,++p;
  45.     }
  46.     dfs(st[1]);
  47.     rep(i,0,a.size()) ans.eb(lca(a[i]+1,b[i]+1)-1);  // 注意这里节点编号从1开始
  48.     return ans;
  49. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表