传送门

题意

q次操作,每次两种操作:

1 x y:将wx变成y

2 x:查询满足一下两个条件的字符串(①以字符串x为后缀②字符串值\(\le wx\))

分析

对n个字符串预处理,设f[i][j]为第i个字符串0~j的子串哈希值。

再用v[i]记录以字符串i为后缀的字符串,统计的时候扫一遍

复杂度\(O(n^2+n*q)\)

trick

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std; #define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
int t,n;
char s[1010][1010];
int a[1010],f[1010][1010],len[1010];
int q,judge,x,y;
vector<int>v[1010];//v[x][i]表示x是v[x][i]的后缀
int base[1010];
const int mod = 1000173169;
const int seed = 131;//取奇数质数 31 131 void init()
{
base[0]=1;
F(i,1,1000) base[i]=(ll)base[i-1]*seed%mod;
} void op1()
{
F(i,1,n)
{
f[i][0]=0;
F(j,1,len[i]) f[i][j]=((ll)f[i][j-1]*seed%mod+s[i][j])%mod;
}
} int Hash(int x,int l,int r)
{
return (f[x][r]-(ll)f[x][l-1]*base[r-l+1]%mod+mod)%mod;
} void op2()
{
F(i,1,n)
{
v[i].push_back(i);
F(j,i+1,n)
{
if(len[i]==len[j])
{
if(Hash(i,1,len[i])==Hash(j,1,len[j])) v[i].push_back(j),v[j].push_back(i);
}
else if(len[i]>len[j])
{
if(Hash(i,len[i]-len[j]+1,len[i])==Hash(j,1,len[j])) v[j].push_back(i);
}
else
{
if(Hash(i,1,len[i])==Hash(j,len[j]-len[i]+1,len[j])) v[i].push_back(j);
//printf("Hash[%d][%d]=%d\n", );
}
}
}
} int main()
{
init();
for(scanf("%d",&t);t--;)
{
scanf("%d",&n);
F(i,1,n)
{
scanf("%s%d",s[i]+1,a+i);
len[i]=strlen(s[i]+1);
v[i].clear();
}
op1();
op2();
//F(i,1,n) printf("%d\n",v[i].size() );
for(scanf("%d",&q);q--;)
{
scanf("%d",&judge);
if(judge==1)
{
scanf("%d %d",&x,&y);
a[x]=y;
}
else
{
scanf("%d",&x);
int sz=v[x].size(),sum=0;
R(i,0,sz) if(a[v[x][i]]<=a[x]) sum++;
printf("%d\n", sum);
}
}
}
}

最新文章

  1. BPM配置故事之案例11-操作外部数据源
  2. Python开发程序:简单主机批量管理工具
  3. 退役?OR 继续
  4. 修改文件中的内容,使用fileinput模块
  5. Effective C++ 4.设计与声明
  6. Python核心编程-基础2
  7. off() 方法 与 unbind() 方法移除绑定事件的处理程序。one()函数用于为每个匹配元素的一个或多个事件绑定一次性事件处理函数
  8. Hive集成HBase详解
  9. RAID,mdadm(笔记)
  10. 如何编译Apache Hadoop2.2.0源代码
  11. C#微信公众号——本地调试
  12. props default 数组/对象的默认值应当由一个工厂函数返回
  13. Confluence 6 修改日志文件的目标位置
  14. Kivy 中文教程 实例入门 简易画板 (Simple Paint App):0. 项目简介 &amp; 成果展示
  15. 近观ArcGIS 10.3.1
  16. Unity注意事项
  17. ubuntu禁止系统自动升级之界面操作
  18. Last Daily Scrum (2015/11/9)
  19. Post方式调用wcf服务
  20. postman请求失败

热门文章

  1. IntelliJ IDEA cannot resolved 处理
  2. SpringCloud中Redis的使用
  3. grunt 试用笔记
  4. winform中使用ReportViewer的时候,找不到报表数据面板.
  5. 3531: [Sdoi2014]旅行
  6. XML-RPC JSON-RPC RPC是实现思路
  7. jQuery整理笔记九----功能性表格开发
  8. jquery.validate ajax验证
  9. [译]Flutter JSON和序列化
  10. QT下的QThread学习(一)