bzoj4896 补退选
Description
Input
Output
Sample Input
1 lcaq
3 lca 0 0 5
1 lcq
3 lc 0 1 5
2 lcaq
3 lc 0 1 5
Sample Output
3
3
HINT
n<=100000,字符串长度 <= 60,输入中的所有字符串只会包含前 10 个小写字母
用动态trie维护各个版本的trie,每个节点维护当前前缀出现次数和最大值
查询时二分
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int ch[*][],Max[*],val[*],root[],pos,ans;
char s[];
void insert(int x,int &y,int v)
{int i,a,b,j,now;
int len=strlen(s);
y=++pos;
val[y]=val[x]+v;
Max[y]=max(Max[x],val[y]);
now=y;
for (i=;i<len;i++)
{
for (j=;j<;j++)
ch[now][j]=ch[x][j];
a=ch[x][s[i]-'a'];
b=ch[now][s[i]-'a']=++pos;
val[b]=val[a]+v;Max[b]=max(Max[a],val[b]);
x=a;now=b;
}
}
int query(int rt)
{int i,len;
len=strlen(s);
for (i=;i<len;i++)
rt=ch[rt][s[i]-'a'];
return Max[rt];
}
int find(int id,int lim)
{
int l=,r=id,mid,as=-;
while (l<=r)
{
mid=(l+r)/;
if (query(root[mid])>lim) as=mid,r=mid-;
else l=mid+;
}
return as;
}
int main()
{int i,q,opt,a,b,c,x;
cin>>q;
for (i=;i<=q;i++)
{
scanf("%d",&opt);
if (opt<=)
{
scanf("%s",s);
if (opt==)
insert(root[i-],root[i],);
else insert(root[i-],root[i],-);
}
else
{
scanf("%s",s);
scanf("%d%d%d",&a,&b,&c);
x=(1ll*a*abs(ans)+b)%c;
root[i]=root[i-];
ans=find(i,x);
printf("%d\n",ans);
}
}
}
bzoj4896 补退选的更多相关文章
- 【BZOJ4896】[Thu Summer Camp2016]补退选 Trie树
[BZOJ4896][Thu Summer Camp2016]补退选 Description X是T大的一名老师,每年他都要教授许多学生基础的C++知识.在T大,每个学生在每学期的开学前都需要选课,每 ...
- [BZOJ4896][THUSC2016]补退选(Trie)
4896: [Thu Summer Camp2016]补退选 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 653 Solved: 228[Subm ...
- 【bzoj4896】[Thu Summer Camp2016]补退选 Trie树+STL-vector
题目描述 X是T大的一名老师,每年他都要教授许多学生基础的C++知识.在T大,每个学生在每学期的开学前都需要选课,每次选课一共分为三个阶段:预选,正选,补退选:其中"补退选"阶段最 ...
- BZOJ 4896 :[Thu Summer Camp2016]补退选 Trie树+Vector
4896: [Thu Summer Camp2016]补退选 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 315 Solved: 97[Submi ...
- BZOJ4896 [Thu Summer Camp2016]补退选
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- BZOJ4896 THUSC2016补退选(trie)
字符串扔进trie,vector记录每个前缀出现次数的最大值的更新记录即可. #include<iostream> #include<cstdio> #include<c ...
- BZOJ4896 [Thu Summer Camp2016]补退选 【trie树】
题目链接 BZOJ4896 题解 \(thu\)怎么那么喜欢出\(trie\)树的题... 我们当然可以按题意模拟建\(trie\) 询问的时候,由于存在删除操作,不满足单调性,不能直接二分答案 我们 ...
- 【bzoj4896】补退选
傻逼题. 每个点维护下vector,然后随便做. #include<bits/stdc++.h> ; using namespace std; typedef long long ll; ...
- LOJ 2991 「THUSC 2016」补退选——trie+线段树合并或vector
题目:https://loj.ac/problem/2291 想了线段树合并的做法.就是用线段树维护 trie 的每个点在各种时间的操作. 然后线段树合并一番,线段树维护前缀最大值,就是维护最大子段和 ...
随机推荐
- @Cacheable的实现原理
如果你用过Spring Cache,你一定对这种配置和代码不陌生: <cache:annotation-driven cache-manager="cacheManager" ...
- [福大软工] W班 总成绩排行榜
评分链接 作业1 作业2 作业3 作业4 总分排名
- Alpha第三天
Alpha第三天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...
- 团队第1次作业:Our Team TAH
Team named TAH 不管一个人多么有才能,但是集体常常比他更聪明和更有力. --奥斯特洛夫斯基 *introduce team and teamate 先说说TAH的含义,是 ...
- 第二周c语言PTA作业留
6-1 计算两数的和与差(10 分) 本题要求实现一个计算输入的两数的和与差的简单函数. 函数接口定义: void sum_diff( float op1, float op2, float psum ...
- Css之导航栏学习
Css: ul { list-style-type:none; margin:; padding:; overflow:hidden; background-color:blue; /*固定在顶部*/ ...
- ThreadLocal源码分析:(一)set(T value)方法
在ThreadLocal的get(),set()的时候都会清除线程ThreadLocalMap里所有key为null的value. 而ThreadLocal的remove()方法会先将Entry中对k ...
- bootstrap 之下拉多选
效果如图: 一.HTML代码 <label class="col-sm-1 control-label text-right" for="ds_host" ...
- 配置Android开发环境遇到的问题
1.给Eclipse设置android的SDK位置时,出现这个:This Android SDK requires Andr...ate ADT to the latest 一个升级ADT到指定版本或 ...
- orchard-1.9.2-1.10.2汉化
安装 首先从github上下载orchard源代码:https://github.com/OrchardCMS/Orchard(下载版本最新的1.10.2) 使用vs2017打开源代码,运行进入安装界 ...