{"id":1077,"date":"2014-11-10T06:29:35","date_gmt":"2014-11-09T22:29:35","guid":{"rendered":"http:\/\/www.shuizilong.com\/house\/?p=1077"},"modified":"2016-08-24T18:53:18","modified_gmt":"2016-08-24T10:53:18","slug":"bzoj-2120-%e6%95%b0%e9%a2%9c%e8%89%b2","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/house\/archives\/bzoj-2120-%e6%95%b0%e9%a2%9c%e8%89%b2\/","title":{"rendered":"BZOJ 2120. \u6570\u989c\u8272"},"content":{"rendered":"<p><!--more--><\/p>\n<p>\u540c <a href=\"https:\/\/www.shuizilong.com\/house\/archives\/uva-12345-dynamic-lensetalr\/\">UVa 12345. Dynamic len(set(a[L:R]))<\/a><\/p>\n<pre class=\"brush: cpp; light: false; title: ; toolbar: true; notranslate\" title=\"\">\r\n\/\/}\/* .................................................................................................................................. *\/\r\n\r\nconst int N = int(1e4) + 9;\r\nint A&#x5B;N], AA&#x5B;N], n, m;\r\n\r\nnamespace ST{\r\n\r\n#define lx l&#x5B;x]\r\n#define rx r&#x5B;x]\r\n#define ly l&#x5B;y]\r\n#define ry r&#x5B;y]\r\n#define ml (ll + rr &gt;&gt; 1)\r\n#define mr (ml + 1)\r\n\r\n    const int NN = N*10*10*7 + 9;\r\n    int l&#x5B;NN], r&#x5B;NN], c&#x5B;NN], tot;\r\n\r\n    int new_node(){\r\n        return ++tot;\r\n    }\r\n\r\n    int Add(int y, int p, int d){\r\n        int x = new_node(), root = x; int ll = 0, rr = n;\r\n        \/\/cout &lt;&lt; p &lt;&lt; &quot; &quot; &lt;&lt; d &lt;&lt;endl;\r\n\r\n        c&#x5B;x] = c&#x5B;y] + d;\r\n        while (ll &lt; rr){\r\n            if (p &lt; mr){\r\n                lx = new_node(), rx = ry;\r\n                x = lx, y = ly, rr = ml;\r\n            }\r\n            else {\r\n                lx = ly, rx = new_node();\r\n                x = rx, y = ry, ll = mr;\r\n            }\r\n            c&#x5B;x] = c&#x5B;y] + d;\r\n        }\r\n        return root;\r\n    }\r\n\r\n    int Sum(int x, int p){ \/\/ \u5c0f\u4e8e x\r\n        int z = 0, ll = 0, rr = n; while (ll &lt; rr){\r\n            if (p &lt; mr) x = lx, rr = ml;\r\n            else z += c&#x5B;lx], x = rx, ll = mr;\r\n        }\r\n        return z;\r\n    }\r\n}\r\n\r\nnamespace BIT{\r\n    int C&#x5B;N], a, b;\r\n\r\n    void Add(int x, int p, int d){\r\n        for (;x&lt;=n;x+=low_bit(x)) C&#x5B;x] = ST::Add(C&#x5B;x], p, d);\r\n    }\r\n    void Modify(int x, int&amp; p, int pp){\r\n        Add(x, p, -1); Add(x, pp, 1); p = pp;\r\n    }\r\n    int Sum(int x){\r\n        int z = 0; for (;x;x^=low_bit(x)) z += ST::Sum(C&#x5B;x], a);\r\n        return z;\r\n    }\r\n    int Sum(int _a, int _b){\r\n        a = _a, b = _b;\r\n        return Sum(b) - Sum(a-1);\r\n    }\r\n}\r\n\r\nconst int AMAX = int(1e6) + 9;\r\nSI H&#x5B;AMAX];\r\n\r\nvoid print(){\r\n    REP_1(i, n) cout &lt;&lt; A&#x5B;i] &lt;&lt; &quot; &quot;; puts(&quot;&quot;);\r\n    REP_1(i, n) cout &lt;&lt; AA&#x5B;i] &lt;&lt; &quot; &quot;; puts(&quot;&quot;);\r\n}\r\n\r\nint main(){\r\n\r\n#ifndef ONLINE_JUDGE\r\n    freopen(&quot;in.txt&quot;, &quot;r&quot;, stdin);\r\n    \/\/freopen(&quot;out.txt&quot;, &quot;w&quot;, stdout);\r\n#endif\r\n\r\n    RD(n, m); REP_1(i, n){\r\n        RD(A&#x5B;i]); SI &amp;s = H&#x5B;A&#x5B;i]]; if (s.empty()) s.insert(0);\r\n        BIT::Add(i, AA&#x5B;i] = *s.rbegin(), 1); s.insert(i);\r\n    }\r\n\r\n    DO(m){\r\n        char cmd; int a, b; RC(cmd); RD(a, b);\r\n        if (cmd == 'Q'){\r\n            OT(BIT::Sum(a, b));\r\n        }\r\n        else{\r\n            if (A&#x5B;a] == b) continue;\r\n            SI::iterator it; SI &amp;sa = H&#x5B;A&#x5B;a]], &amp;sb = H&#x5B;b]; if (sb.empty()) sb.insert(0);\r\n            it = sa.upper_bound(a); if (it != sa.end()) BIT::Modify(*it, AA&#x5B;*it], AA&#x5B;a]);\r\n            it = sb.upper_bound(a); if (it != sb.end()) BIT::Modify(*it, AA&#x5B;*it], a);\r\n            --it; BIT::Modify(a, AA&#x5B;a], *it);\r\n            sa.erase(a); sb.insert(a); A&#x5B;a] = b;\r\n        }\r\n    }\r\n}\r\n\r\n<\/pre>\n<pre class=\"brush: cpp; light: false; title: ; toolbar: true; notranslate\" title=\"\">\r\nstruct BITT{\r\n    map&lt;int, int&gt; C;\r\n    void Add(int x, int d){\r\n        ++x;\r\n        for (;x&lt;=n;x+=low_bit(x)) C&#x5B;x] += d;\r\n    }\r\n    int Sum(int x){\r\n        int z = 0; for (;x;x^=low_bit(x)) z += C&#x5B;x];\r\n        return z;\r\n    }\r\n};\r\n\r\nnamespace BIT{\r\n    BITT C&#x5B;N]; int a, b;\r\n\r\n    void Add(int x, int p, int d){\r\n        for (;x&lt;=n;x+=low_bit(x)) C&#x5B;x].Add(p, d);\r\n    }\r\n    void Modify(int x, int&amp; p, int pp){\r\n        Add(x, p, -1); Add(x, pp, 1); p = pp;\r\n    }\r\n    int Sum(int x){\r\n        int z = 0; for (;x;x^=low_bit(x)) z += C&#x5B;x].Sum(a);\r\n        return z;\r\n    }\r\n    int Sum(int _a, int _b){\r\n        a = _a, b = _b;\r\n        return Sum(b) - Sum(a-1);\r\n    }\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[22],"tags":[],"class_list":["post-1077","post","type-post","status-publish","format-standard","hentry","category-bzoj"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2tdP7-hn","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/1077","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/comments?post=1077"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/posts\/1077\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/media?parent=1077"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/categories?post=1077"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/house\/wp-json\/wp\/v2\/tags?post=1077"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}