洛谷 P3732 [HAOI2017]供给侧改革【trie树】
2018-03-07 15:27
225 查看
参考:http://blog.csdn.net/di4covery/article/details/73065684
我以为是后缀数组+某某数据结构,结果居然是01trie!!题解说“因为是随机的所以大概不会超过40个~”所以40是咋算的啊我一介非酋真的不能估计……
好了正解是这样的,先把询问离线按r排序,然后按照每个r的位置把这个后缀的前40个(我比较非就写了50个)放进trie树里,每扫到trie深度为dep的一个节点时,对这个dep记录一个tg代表最后一次更新到这个点的后缀的开始位置,于是把这个后缀塞进去就能得到一个tg数组,tg[i]记录了最晚的后缀开始位置与当前后缀的LCP是i这个深度,于是就可以更新了。
注意这里的LCP并不是最长,所以要贪心的更新,即i*(tg[i]-max(q[ti].l-1,tg[i+1])),如果i不是最长后缀就留到i+1更新
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> using namespace std; const int N=5000005; int n,m,tg ,c [2],f ,tot; long long ans ; char s ; struct qwe { int l,r,id; }q ; int read() { int r=0,f=1; char p=getchar(); while(p>'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<='9') { r=r*10+p-48; p=getchar(); } return r*f; } bool cmp(const qwe &a,const qwe &b) { return a.r<b.r; } void add(int x) { int now=0; for(int i=0;i+x<=n&&i+1<=50;i++) { int a=s[i+x]-'0'; if(!c[now][a]) c[now][a]=++tot; tg[i+1]=max(f[c[now][a]],tg[i+1]); f[c[now][a]]=x; now=c[now][a]; } } int main() { n=read(),m=read(); scanf("%s",s+1); for(int i=1;i<=m;i++) q[i].l=read(),q[i].r=read(),q[i].id=i; sort(q+1,q+1+m,cmp); int ti=1; for(int i=1;i<=n;i++) { add(i); while(ti<=m&&q[ti].r==i) { for(int i=1;i<=50;i++) { if(tg[i]>=q[ti].l) ans[q[ti].id]+=1ll*i*(tg[i]-max(q[ti].l-1,tg[i+1])); else break; } ti++; } } for(int i=1;i<=m;i++) printf("%lld\n",ans[i]); return 0; }
相关文章推荐
- 洛谷3732:[HAOI2017]供给侧改革——题解
- [HAOI2017]供给侧改革
- 洛谷 P3731 [HAOI2017]新型城市化【最大流(二分图匹配)+tarjan】
- 洛谷 P3731 [HAOI2017]新型城市化
- SDSC 2017 Day1 T2 && 洛谷 2652 同花顺
- 洛谷3703 [SDOI2017] 树点染色 【LCT】【线段树】
- 洛谷3707 [SDOI2017] 相关分析 【线段树】
- 洛谷P3953 [NOIP2017] 逛公园(最短路+拓扑序+DP)
- AC日记——[HAOI2015]树上操作 洛谷 P3178
- BZOJ1051(洛谷P2341) [HAOI2006]受欢迎的牛
- 洛谷 P3183 BZOJ 4562 [HAOI2016]食物链
- 洛谷P3956 [NOIp2017]棋盘
- 洛谷 P4032 「CodePlus 2017 12 月赛」火锅盛宴(splay+堆)
- [BZOJ4889][洛谷P3759][TJOI2017]不勤劳的图书管理员 分块+树状数组
- 洛谷3745 [六省联考2017]期末考试
- 洛谷3958 noip2017 奶酪
- 洛谷 P2515 [HAOI2010]软件安装
- 洛谷 P2522 [HAOI2011]Problem b(莫比乌斯反演+容斥)
- 洛谷 [USACO17OPEN]Bovine Genomics G奶牛基因组(金) ———— 1道骗人的二分+trie树(其实是差分算法)
- codevs1866(洛谷p2515)软件开发【HAOI2010】