{"categories":["\u5e73\u65b9\u5206\u5272"],"width":"100%","blog_title":"paruki\u306e\u30d6\u30ed\u30b0","provider_url":"https://hatena.blog","author_url":"https://blog.hatena.ne.jp/parukii/","type":"rich","published":"2018-07-28 18:27:56","provider_name":"Hatena Blog","blog_url":"https://par.hateblo.jp/","description":"\u65b9\u91dd O(Qsqrt(N))\u3067\u9593\u306b\u5408\u3044\u305d\u3046\u306a\u306e\u3067\u5e73\u65b9\u5206\u5272\u3092\u8a66\u3059 \u30af\u30a8\u30ea\u306f[l, r)\u30670-indexed\u3068\u3059\u308b\u3002 f(x, i) = 106i ord(S[x][i])(0<=i<N) \u3068\u304a\u304f\u3068 \u03a3_{l<=i<r}f(x, i) / (106l) \u304c\u89e3\u3002 \u5e73\u65b9\u5206\u5272\u306e\u5de5\u592b g(x, k) = \u03a3_{kR<=i<=(k+1)R}f(x, i) \u3068\u304a\u304f\u3002 \u3068\u308a\u3042\u3048\u305a[l, r)\u306b\u542b\u307e\u308c\u308b\u3059\u3079\u3066\u306e[kR, (k+1)R)\u306b\u3064\u3044\u3066 swap(g(x, k), g(y, k)) \u306f\u308f\u304b\u308b\u3002 \u3053\u306e\u3068\u304d\u3001f(x, i)\u3001f(y, i)\u306e\u66f4\u65b0\u3092\u3069\u3046\u3057\u305f\u3089\u3088\u3044\u304b\u3002 \u611a\u76f4\u306bf(x, i)\u3068f(y, i)\u3092\u4ea4\u63db\u3059\u308b\u2026","author_name":"parukii","title":"E. Hash Swapping | soundhound2018-summer-final-open","height":"190","image_url":null,"url":"https://par.hateblo.jp/entry/2018/07/28/182756","version":"1.0","html":"<iframe src=\"https://hatenablog-parts.com/embed?url=https%3A%2F%2Fpar.hateblo.jp%2Fentry%2F2018%2F07%2F28%2F182756\" title=\"E. Hash Swapping | soundhound2018-summer-final-open - paruki\u306e\u30d6\u30ed\u30b0\" class=\"embed-card embed-blogcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"></iframe>"}