后缀平衡树+线段树。

$O(1)$比较大小的标号法真是强大。

#include<cstdio>
#include<cmath>
#define N 300010
#define M 500010
using namespace std;
typedef unsigned long long ll;
const ll inf=1ULL<<63;
const double A=0.8;
ll tl[N],tr[N],tm[N];
int size[N],son[N][2],f[N],v[N],tot,root,id[N],cnt;
char s[N],ch;
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline bool cmp(int a,int b){return s[a]==s[b]?tm[a-1]>tm[b-1]:s[a]>s[b];}
int ins(int x,int p){int b=cmp(p,v[x]);if(!son[x][b]){son[x][b]=++tot;f[tot]=x;v[tot]=p;if(!b)tl[tot]=tl[x],tr[tot]=tm[x];else tl[tot]=tm[x],tr[tot]=tr[x];tm[tot]=(tl[tot]+tr[tot])>>1;return tot;}else return ins(son[x][b],p);
}
void dfs(int x){if(son[x][0])dfs(son[x][0]);id[++cnt]=x;if(son[x][1])dfs(son[x][1]);
}
int build(int fa,int l,int r,ll a,ll b){int mid=(l+r)>>1,x=id[mid];f[x]=fa;son[x][0]=son[x][1]=0;size[x]=1;tl[x]=a;tr[x]=b;tm[x]=(a+b)>>1;if(l==r)return x;if(l<mid)size[x]+=size[son[x][0]=build(x,l,mid-1,a,tm[x])];if(r>mid)size[x]+=size[son[x][1]=build(x,mid+1,r,tm[x],b)];return x;
}
inline int rebuild(int x){cnt=0;dfs(x);return build(f[x],1,cnt,tl[x],tr[x]);
}
inline void insert(int p){if(!root){root=tot=size[1]=1;v[1]=p;tr[1]=inf,tm[1]=inf>>1;return;}int x=ins(root,p);int deep=0,z=x;while(z)size[z]++,z=f[z],deep++;if(deep<log(tot)/log(1/A))return;while((double)size[son[x][0]]<A*size[x]&&(double)size[son[x][1]]<A*size[x])x=f[x];if(!x)return;if(x==root){root=rebuild(x);return;}int y=f[x],b=son[y][1]==x,now=rebuild(x);son[y][b]=now;
}
int l[M<<1],r[M<<1],min[M<<1],seq[M],TOT;
void build(int a,int b){int x=++TOT;if(a==b){min[x]=a;return;}int mid=(a+b)>>1;l[x]=TOT+1;build(a,mid);r[x]=TOT+1;build(mid+1,b);min[x]=tm[seq[min[l[x]]]]<=tm[seq[min[r[x]]]]?min[l[x]]:min[r[x]];
}
void change(int x,int a,int b,int c){if(a==b)return;int mid=(a+b)>>1;if(c<=mid)change(l[x],a,mid,c);else change(r[x],mid+1,b,c);min[x]=tm[seq[min[l[x]]]]<=tm[seq[min[r[x]]]]?min[l[x]]:min[r[x]];
}
int ask(int x,int a,int b,int c,int d){if(c<=a&&b<=d)return min[x];int mid=(a+b)>>1,i,j;if(d<=mid)return ask(l[x],a,mid,c,d);if(c>mid)return ask(r[x],mid+1,b,c,d);i=ask(l[x],a,mid,c,d),j=ask(r[x],mid+1,b,c,d);return tm[seq[i]]<=tm[seq[j]]?i:j;
}
int n,m,i,x,y,len,type,ans;
int main(){read(n);read(m);read(len);read(type);for(getchar(),i=1;i<=len;i++)s[len-i+1]=getchar();for(i=1;i<=len;i++)insert(i);for(i=1;i<=n;i++)read(seq[i]);build(1,n);while(m--){while(!(((ch=getchar())=='I')||(ch=='C')||(ch=='Q')));read(x);if(ch=='I')s[++len]=(x^ans*type)+'a',insert(len);if(ch=='C')read(seq[x]),change(1,1,n,x);if(ch=='Q')read(y),printf("%d\n",ans=ask(1,1,n,x,y));}return 0;
}

  

BZOJ3682 : Phorni相关推荐

  1. [学习笔记]后缀平衡树

    后缀数组+平衡树=后缀平衡树 支持动态插入字符(只能往前插入),即插入一个后缀,维护所有后缀的排名 插入后缀找到位置?平衡树上二分 法一: 哈希+二分,太慢 法二: 第一个字符不同,已经可以比较,否则 ...

  2. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  3. 3682: Phorni 后缀平衡树 线段树

    国际惯例的题面: 考虑如果没有强制在线我们能怎么水掉这个题,先构造出字符串,各种方法求一下后缀数组,然后线段树维护区间rank最小的位置即可. 然而他要求强制在线,支持插入后缀,并比较后缀大小(求ra ...

  4. [补档]noip2019集训测试赛(十三)

    Problem A: Fairy Time Limit: 1000 ms Memory Limit: 256 MB Description 给定n个点,m条边的无向图(无自环),可以从图中删除一条边, ...

最新文章

  1. 5,ORM组件XCode(动手)
  2. Python学习札记(二十三) 函数式编程4 sorted
  3. 获取滚动文本框TextArea焦点位置信息
  4. mysql中的blob和text区别
  5. jpa中::::_项目学生:JPA标准查询
  6. 洛谷 P2251 质量检测
  7. 【Java数据结构与算法】第十一章 顺序存储二叉树、线索二叉树和堆
  8. 力扣 独一无二的出现次数
  9. 学习笔记6—pandas中ix,loc,iloc有什么区别?
  10. 解读Linux下的password命令
  11. 数学之美-隐含马尔可夫模型-笔记
  12. 思科CISCO ASA 5521 防火墙 Ipsec 配置详解
  13. 快递物流类API推荐
  14. 创业工场麦刚:不要把创业美化
  15. 你真的理解 Kubernetes 中的 requests 和 limits 吗?
  16. Cesium开发:简单箭头画法
  17. 11、安全网络架构和保护网络组件
  18. (三)Grahpics之Blit
  19. cvCaptureFromFile一直返回NULL
  20. 如何选择服务器的类型

热门文章

  1. @老板:别开视频会议了,效率低没人care,斯坦福、微软都可以作证
  2. Adam又要“退休”了?耶鲁大学团队提出AdaBelief,NeurIPS 2020收录,却引来网友质疑...
  3. 谷歌人为干预搜索结果被曝光:增加大公司曝光,主动营造岁月静好
  4. NLP领域“学霸”太多,一年前标准已过时,新跑分标准SuperGLUE出炉
  5. 从前后端分离到GraphQL,携程如何用Node实现?\n
  6. ZooKeeper Watch Java API浅析getChildren
  7. 【luogu 3375】【模板】KMP字符串匹配
  8. css权重计算方法浅谈
  9. 苹果iOS系统下检查第三方APP是否安装及跳转启动
  10. 转: mysql create view 创建视图