Advertisement
a53

ksir

a53
Jan 9th, 2017
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.82 KB | None | 0 0
  1. ///100p
  2. #include <bits/stdc++.h>
  3. #define maxN 200005
  4. #define maxLog 24
  5. using namespace std;
  6. long long sa[maxLog][maxN];
  7. long long pos[maxN],sum[maxN],lcp[maxN];
  8. long long n,i,j,q,loga,x;
  9. string str;
  10. struct nod
  11. {
  12. long long nr1,nr2,ind;
  13. }l[maxN];
  14. bool cmp(const nod &a,const nod &b)
  15. {
  16. if(a.nr1==b.nr1)
  17. return a.nr2<b.nr2;
  18. return a.nr1<b.nr1;
  19. }
  20. void build_SA()
  21. {
  22. for(int i=0;i<n;i++)
  23. sa[0][i]=str[i];
  24. for(loga=1;(1<<loga)<n;loga++)
  25. {
  26. for(j=0;j<n;j++)
  27. {
  28. l[j].ind=j;
  29. l[j].nr1=sa[loga-1][j];
  30. if(j+(1<<(loga-1))<n)
  31. l[j].nr2=sa[loga-1][j+(1<<(loga-1))];
  32. else l[j].nr2=-1;
  33. }
  34. sort(l,l+n,cmp);
  35. for(j=0;j<n;j++)
  36. if(j && l[j].nr1==l[j-1].nr1 && l[j].nr2==l[j-1].nr2)
  37. sa[loga][l[j].ind]=sa[loga][l[j-1].ind];
  38. else sa[loga][l[j].ind]=j;
  39. }
  40. loga--;
  41. for(int i=0;i<n;i++)
  42. pos[sa[loga][i]]=i;
  43. }
  44. void build_lcp()
  45. {
  46. int k=0;
  47. vector<int> _rank(n+5,0);
  48. for(int i=0;i<n;i++)
  49. _rank[pos[i]]=i;
  50. lcp[0]=0;
  51. for(int i=0;i<n;i++,k?k--:0)
  52. {
  53. if(_rank[i]==n-1){
  54. k=0;
  55. continue;
  56. }
  57. int j=pos[_rank[i]+1];
  58. while(i+k<n && j+k<n && str[i+k]==str[j+k])
  59. k++;
  60. lcp[_rank[i]+1]=k;
  61. }
  62. }
  63. int main()
  64. {
  65. ifstream f("ksir.in");
  66. ofstream g("ksir.out");
  67. f>>str;
  68. n=str.size();
  69. build_SA();
  70. build_lcp();
  71. sum[0]=n-pos[0];
  72. for(i=1;i<n;i++)
  73. sum[i]=sum[i-1]+(n-pos[i]-lcp[i]);
  74. f>>q;
  75. while(q--)
  76. {
  77. f>>x;
  78. int poz=lower_bound(sum,sum+n,x)-sum;
  79. for(j=0,i=pos[poz];j<x-sum[poz-1]+lcp[poz];i++,j++)
  80. g<<str[i];
  81. g<<'\n';
  82. }
  83. return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement