{"id":808,"date":"2020-09-19T16:06:34","date_gmt":"2020-09-19T08:06:34","guid":{"rendered":"http:\/\/www.zyhcoding.club\/?p=808"},"modified":"2020-09-19T16:26:38","modified_gmt":"2020-09-19T08:26:38","slug":"%e5%81%8f%e5%ba%8f%e9%97%ae%e9%a2%98","status":"publish","type":"post","link":"http:\/\/www.zyhcoding.club\/index.php\/2020\/09\/19\/%e5%81%8f%e5%ba%8f%e9%97%ae%e9%a2%98\/","title":{"rendered":"\u504f\u5e8f\u95ee\u9898"},"content":{"rendered":"<blockquote>\n<p>\u504f\u5e8f\u96c6\u5408\u662f\u6570\u5b66\u4e2d\uff0c\u7279\u522b\u662f\u5e8f\u7406\u8bba\u4e2d\uff0c\u6307\u914d\u5907\u4e86\u90e8\u5206\u6392\u5e8f\u5173\u7cfb\u7684\u96c6\u5408\u3002 \u8fd9\u4e2a\u7406\u8bba\u5c06\u6392\u5e8f\u3001\u987a\u5e8f\u6216<br \/>\n\u6392\u5217\u8fd9\u4e2a\u96c6\u5408\u7684\u5143\u7d20\u7684\u76f4\u89c9\u6982\u5ff5\u62bd\u8c61\u5316\u3002\u8fd9\u79cd\u6392\u5e8f\u4e0d\u5fc5\u7136\u9700\u8981\u662f\u5168\u90e8\u7684\uff0c\u5c31\u662f\u8bf4\u4e0d\u5fc5\u8981\u4fdd\u8bc1\u6b64\u96c6<br \/>\n\u5408\u5185\u7684\u6240\u6709\u5bf9\u8c61\u7684\u76f8\u4e92\u53ef\u6bd4\u8f83\u6027\u3002<\/p>\n<\/blockquote>\n<p>\u4e00\u822c\u7684\u8bf4\u504f\u5e8f\u96c6\u5408\u7684\u4e24\u4e2a\u5143\u7d20 x \u548c y \u53ef\u4ee5\u5904\u4e8e\u56db\u4e2a\u76f8\u4e92\u6392\u65a5\u7684\u5173\u8054\u4e2d\u4efb\u4f55\u4e00\u4e2a\uff1a\u8981\u4e48 x\\&lt;y \uff0c\u8981\u4e48x&gt;y\uff0c\u8981\u4e48x=y\uff0c\u8981\u4e48x\u548cy\u662f\u4e0d\u53ef\u6bd4\u8f83\u7684\u3002<br \/>\n\u4e48 \uff0c\u8981\u4e48 \uff0c\u8981\u4e48 \u548c \u662f\u4e0d\u53ef\u6bd4\u8f83\u7684\uff08\u4e09\u4e2a\u90fd\u4e0d\u662f\uff09\u3002<\/p>\n<p>\u95ee\u9898\u5f62\u5f0f\uff1a\u7ed9\u5b9an\u4e2ak\u5143\u7ec4\uff0c\u5bf9\u4e8e\u6bcf\u4e2a\u5143\u7ec4i\uff0c\u95ee\u6709\u591a\u5c11\u4e2a\u5143\u7ec4j\u6ee1\u8db3j\u91cc\u7684\u6bcf\u4e2a\u5143\u7d20\u90fd\u5c0f\u4e8e\u5bf9\u5e94\u7684i\u91cc\u7684\u5143\u7d20\u3002<\/p>\n<p>\u504f\u5e8f\u95ee\u9898\u79bb\u7ebf\u65f6\u662f\u6bd4\u8f83\u5bb9\u6613\u89e3\u51b3\u7684\uff0c\u5982\u679c\u5f3a\u5236\u5728\u7ebf\uff0c\u53ea\u80fd\u4f7f\u7528\u6811\u5957\u6811\uff0c\u73b0\u5728\u8fd8\u4e0d\u4f1a\uff0c\u4ee5\u540e\u518d\u8bf4\uff0c\u8fd9\u91cc\u53ea\u8ba8\u8bba\u79bb\u7ebf\u7684\u3002<\/p>\n<h4>\u4e00\u7ef4\u504f\u5e8f\u95ee\u9898<\/h4>\n<p>\u4e00\u7ef4\u504f\u5e8f\u5176\u5b9e\u5c31\u662f\u5168\u5e8f\u7684\uff0c\u6392\u5e8f\u5c31\u884c\u3002<\/p>\n<h4>\u4e8c\u7ef4\u504f\u5e8f\u95ee\u9898<\/h4>\n<p>\u4e8c\u7ef4\u504f\u5e8f\u95ee\u9898\u53ef\u4ee5\u7528\u6811\u72b6\u6570\u7ec4\uff0c\u5148\u628a\u7b2c\u4e00\u5173\u952e\u5b57\u6392\u5e8f\uff0c\u7136\u540e\u5f80\u540e\u626b\u63cf\uff0c\u626b\u63cf\u5230i\u65f6\uff0c\u7528\u6811\u72b6\u6570\u7ec4\u5bf9[1,i)\u7684\u5143\u7d20\u8fdb\u884c\u7edf\u8ba1\uff0c\u7136\u540e\u6c42\u7b2c\u4e8c\u5173\u952e\u5b57\u6ee1\u8db3\u6761\u4ef6\u7684\u4e2a\u6570\u5373\u53ef\u3002<br \/>\n\u65f6\u95f4\u590d\u6742\u5ea6<code class=\"katex-inline\">O(nlogn)<\/code><\/p>\n<h3>\u4e09\u7ef4\u504f\u5e8f\u95ee\u9898<\/h3>\n<p>\u76ee\u524d\u53ea\u4f1aCDQ\u5206\u6cbb<br \/>\n\u65e2\u7136\u662f\u5206\u6cbb\u7684\u8bdd\uff0c\u4e4b\u524d\u4e5f\u5199\u8fc7MergeSort\uff0c\u683c\u5f0f\u5927\u6982\u5c31\u90a3\u6837\uff0c\u5148\u628a\u7b2c\u4e00\u7ef4\u6392\u5e8f\uff0c\u7136\u540e\u5206\u6210\u5de6\u53f3\u4e24\u4e2a\u533a\u95f4\uff0c\u8fd9\u6837\u53ef\u4ee5\u4fdd\u8bc1\u6709\u533a\u95f4\u4e0d\u4f1a\u5bf9\u5de6\u533a\u95f4\u6709\u8d21\u732e\uff0c\u53ea\u8003\u8651\u5de6\u533a\u95f4\u5bf9\u53f3\u533a\u95f4\u7684\u8d21\u732e\uff0c\u5148\u5206\u522b\u5bf9\u5de6\u53f3\u4e24\u533a\u95f4\u64cd\u4f5c\uff0c\u5b8c\u6210\u540e\u5de6\u53f3\u4e24\u533a\u95f4\u5185\u5df2\u7ecf\u5206\u522b\u6309\u7b2c\u4e8c\u5173\u952e\u5b57\u6392\u597d\u5e8f\u4e86\uff0c\u7136\u540e\u53cc\u6307\u9488\u5206\u522b\u626b\u63cf\u5de6\u53f3\u533a\u95f4\uff0c\u5bf9\u4e8e\u53f3\u533a\u95f4\u7684\u5143\u7d20j\uff0c\u628a\u5de6\u533a\u95f4\u4e2d\u7b2c\u4e8c\u5173\u952e\u5b57\u5c0f\u4e8ej\u7684\u5143\u7d20\u5206\u522b\u52a0\u5165\u6811\u72b6\u6570\u7ec4\uff0c\u6ce8\u610f\u52a0\u5165\u7684\u662f\u7b2c\u4e09\u5173\u952e\u5b57\u503c\uff0c\u8fd9\u6837\u7edf\u8ba1\u6709\u591a\u5c11\u4e2a\u5143\u7ec4\u7684\u7b2c\u4e09\u5173\u952e\u5b57\u5c0f\u4e8ej\u5c31\u884c\u4e86\u3002<br \/>\n\u6700\u540e\u5728\u5f52\u5e76\u6392\u5e8f\uff0c\u628a\u7b2c\u4e8c\u5173\u952e\u5b57\u6392\u5e8f\u5373\u53ef\u3002<br \/>\n\u65f6\u95f4\u590d\u6742\u5ea6<code class=\"katex-inline\">O(nlog^2n)<\/code><\/p>\n<h3>\u591a\u7ef4\u504f\u5e8f\u95ee\u9898<\/h3>\n<p>\u53ef\u4ee5CDQ\u5206\u6cbb\u5957CDQ\u5206\u6cbb\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528bitset\u548c\u5206\u5757\u6765\u505a\u3002<\/p>\n<p><a href=\"https:\/\/www.luogu.com.cn\/problem\/P3810\">\u6d1b\u8c37P3810 \u964c\u4e0a\u82b1\u5f00<\/a><br \/>\n\u4e09\u7ef4\u504f\u5e8f\u677f\u5b50<\/p>\n<pre><code class=\"language-c++\">#include &lt;bits\/stdc++.h&gt;\n\nusing namespace std;\nconst int maxn = 1e5+5, maxk = 2e5+5;\nint n, k, m;\nstruct zyh{\n    int a, b, c;\n    int w, t;\n}nums[maxn], tmp[maxn];\nint c[maxk], ans[maxn];\ninline int lowbit(int i){\n    return i &amp; (-i);\n}\nvoid add(int i, int d){\n    while (i&lt;=k){\n        c[i] += d;\n        i += lowbit(i);\n    }\n    return;\n}\nint sum(int i){\n    int ans = 0;\n    while (i){\n        ans += c[i];\n        i -= lowbit(i);\n    }\n    return ans;\n}\nvoid cdq(int l, int r){\n    if (l==r)   return;\n    int mid = (l+r) &gt;&gt; 1;\n    cdq(l, mid);    cdq(mid+1, r);\n    int i = l, j = mid+1, cnt = 0;\n    for ( ; j&lt;=r; j++){\n        while (i&lt;=mid &amp;&amp; nums[i].b&lt;=nums[j].b)  add(nums[i++].c, nums[i].t);\n        nums[j].w += sum(nums[j].c);\n    }\n    for (i--; i&gt;=l; i--)  add(nums[i].c, -nums[i].t);\n    i = mid;\n    i = l, j = mid+1;\n    while (i&lt;=mid &amp;&amp; j&lt;=r){\n        if (nums[i].b &lt;= nums[j].b) tmp[++cnt] = nums[i++];\n        else    tmp[++cnt] = nums[j++];\n    }\n    while (i&lt;=mid)  tmp[++cnt] = nums[i++];\n    while (j&lt;=r)    tmp[++cnt] = nums[j++];\n    for (i=l, j=1; i&lt;=r; i++, j++)  nums[i] = tmp[j];\n    return;\n}\ninline bool cmp(struct zyh x, struct zyh y){\n    if (x.a != y.a) return x.a &lt; y.a;\n    if (x.b != y.b) return x.b &lt; y.b;\n    return x.c &lt; y.c;\n}\ninline bool equal(struct zyh x, struct zyh y){\n    if (x.a==y.a &amp;&amp; x.b==y.b &amp;&amp; x.c==y.c)   return true;\n    return false;\n}\nint main(){\n    scanf (&quot;%d %d&quot;, &amp;n, &amp;k);\n    for (int i=1; i&lt;=n; i++){\n        scanf (&quot;%d %d %d&quot;, &amp;nums[i].a, &amp;nums[i].b, &amp;nums[i].c);\n        nums[i].w = 0, nums[i].t = 1;\n    }\n    sort (nums+1, nums+n+1, cmp);\n    int cnt = 1;\n    tmp[1] = nums[1];\n    for (int i=2; i&lt;=n; i++){\n        if (!equal(nums[i], nums[i-1])) tmp[++cnt] = nums[i];\n        else    tmp[cnt].t++;\n    }\n    m = n, n = cnt;\n    for (int i=1; i&lt;=n; i++)    nums[i] = tmp[i], nums[i].w = nums[i].t-1;\n    cdq(1, n);\n    for (int i=1; i&lt;=n; i++)    ans[nums[i].w] += nums[i].t;\n    for (int i=0; i&lt;m; i++)\n        printf (&quot;%d\\n&quot;, ans[i]);\n    return 0;\n}<\/code><\/pre>\n<h5><a href=\"https:\/\/ac.nowcoder.com\/acm\/problem\/53272\">\u8003\u8bd5<\/a><\/h5>\n<p>\u4e09\u7ef4\u504f\u5e8f + \u79bb\u6563\u5316<\/p>\n<pre><code class=\"language-c++\">#include &lt;bits\/stdc++.h&gt;\n\nusing namespace std;\nconst int maxn = 2e5+5, maxm = 6e5+5;\nint n, q;\nstruct zyh{\n    int x, y, z;\n    int w, t;\n    int idx;\n}nums[maxn], tmp[maxn];\nstruct zyha{\n    int w, i, j, v;\n}disc[maxm];\nint cnt, tempn;\nint c[maxm], m;\nint ans[maxn\/2], mp1[maxn], mp2[maxn];\ninline int lowbit(int i){\n    return i &amp; (-i);\n}\ninline void add(int i, int d){\n    while (i&lt;=m){\n        c[i] += d;\n        i += lowbit(i);\n    }\n    return;\n}\ninline int sum(int i){\n    int ans = 0;\n    while (i){\n        ans += c[i];\n        i -= lowbit(i);\n    }\n    return ans;\n}\nvoid cdq(int l, int r){\n    if (l==r)   return;\n    int mid = (l+r) &gt;&gt; 1;\n    cdq(l, mid);    cdq(mid+1, r);\n    int i=l, j=mid+1, cnt=0;\n    for ( ; j&lt;=r; j++){\n        while (i&lt;=mid &amp;&amp; nums[i].y&gt;=nums[j].y){\n            add(nums[i].z, nums[i].t);\n            i++;\n        }\n        nums[j].w += sum(m) - sum(nums[j].z-1);\n    }\n    for (i--; i&gt;=l; i--)    add(nums[i].z, -nums[i].t);\n    i=l, j=mid+1, cnt=0;\n    while (i&lt;=mid &amp;&amp; j&lt;=r){\n        if (nums[i].y &gt;= nums[j].y)   tmp[++cnt] = nums[i++];\n        else    tmp[++cnt] = nums[j++];\n    }\n    while (i&lt;=mid)  tmp[++cnt] = nums[i++];\n    while (j&lt;=r)    tmp[++cnt] = nums[j++];\n    for (i=l, j=1; i&lt;=r; i++, j++)  nums[i] = tmp[j];\n    return;\n}\ninline int read(){\n    int x=0;    char ch=getchar();\n    while (ch&lt;&#039;0&#039; || ch&gt;&#039;9&#039;)    ch=getchar();\n    while (ch&gt;=&#039;0&#039; &amp;&amp; ch&lt;=&#039;9&#039;){\n        x = x*10 + ch-&#039;0&#039;;\n        ch=getchar();\n    }\n    return x;\n}\ninline bool cmp(struct zyha x, struct zyha y){\n    return x.w &lt; y.w;\n}\ninline bool cmp1(struct zyh a, struct zyh b){\n    if (a.x != b.x) return a.x &gt; b.x;\n    if (a.y != b.y) return a.y &gt; b.y;\n    return a.z &gt; b.z;\n}\ninline bool equal(struct zyh a, struct zyh b){\n    if (a.x==b.x &amp;&amp; a.y==b.y &amp;&amp; a.z==b.z)   return true;\n    return false;\n}\nint main(){\n    int a, b;\n    cnt = 0;\n    scanf (&quot;%d %d&quot;, &amp;n, &amp;q);\n    tempn = n;\n    for (int i=1; i&lt;=n; i++){\n        disc[++cnt].w = read(), disc[cnt].i = i, disc[cnt].j = 1;\n        disc[++cnt].w = read(), disc[cnt].i = i, disc[cnt].j = 2;\n        disc[++cnt].w = disc[cnt].w + disc[cnt-1].w, disc[cnt].i = i, disc[cnt].j = 3;\n    }\n    for (int i=n+1; i&lt;=n+q; i++){\n        disc[++cnt].w = read(), disc[cnt].i = i, disc[cnt].j = 1;\n        disc[++cnt].w = read(), disc[cnt].i = i, disc[cnt].j = 2;\n        disc[++cnt].w = read(), disc[cnt].i = i, disc[cnt].j = 3;\n    }\n    sort (disc+1, disc+1+cnt, cmp);\n    disc[1].v = 1;\n    for (int i=2; i&lt;=cnt; i++){\n        if (disc[i].w == disc[i-1].w)   disc[i].v = disc[i-1].v;\n        else    disc[i].v = disc[i-1].v + 1;\n    }\n    m = disc[cnt].v;\n    for (int i=1; i&lt;=cnt; i++){\n        if (disc[i].j==1)   nums[disc[i].i].x = disc[i].v;\n        else if (disc[i].j==2)  nums[disc[i].i].y = disc[i].v;\n        else    nums[disc[i].i].z = disc[i].v;\n    }\n\n    for (int i=1; i&lt;=n; i++)  nums[i].t = 1;\n    for (int i=n+1; i&lt;=n+q+1; i++)  nums[i].t = 0;\n    for (int i=1; i&lt;=n+q+1; i++)    nums[i].idx = i;\n    sort (nums+1, nums+n+q+1, cmp1);\n    cnt = 1, tmp[1] = nums[1];\n    for (int i=2; i&lt;=n+q; i++){\n        if (equal(nums[i], nums[i-1]))\n            tmp[cnt].t += nums[i].t;\n        else\n            tmp[++cnt] = nums[i];\n        mp1[nums[i].idx] = tmp[cnt].idx;\n    }\n    n = cnt;\n    for (int i=1; i&lt;=n; i++){\n        nums[i] = tmp[i];\n        nums[i].w = nums[i].t;\n    }\n    cdq(1, n);\n    for (int i=1; i&lt;=n; i++)    mp2[nums[i].idx] = nums[i].w;\n    for (int i=1+tempn; i&lt;=tempn+q; i++)    printf (&quot;%d\\n&quot;, mp2[mp1[i]]);\n    return 0;\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u504f\u5e8f\u96c6\u5408\u662f\u6570\u5b66\u4e2d\uff0c\u7279\u522b\u662f\u5e8f\u7406\u8bba\u4e2d\uff0c\u6307\u914d\u5907\u4e86\u90e8\u5206\u6392\u5e8f\u5173\u7cfb\u7684\u96c6\u5408\u3002 \u8fd9\u4e2a\u7406\u8bba\u5c06\u6392\u5e8f\u3001\u987a\u5e8f\u6216 \u6392\u5217\u8fd9\u4e2a\u96c6\u5408 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[14],"tags":[],"_links":{"self":[{"href":"http:\/\/www.zyhcoding.club\/index.php\/wp-json\/wp\/v2\/posts\/808"}],"collection":[{"href":"http:\/\/www.zyhcoding.club\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.zyhcoding.club\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.zyhcoding.club\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.zyhcoding.club\/index.php\/wp-json\/wp\/v2\/comments?post=808"}],"version-history":[{"count":8,"href":"http:\/\/www.zyhcoding.club\/index.php\/wp-json\/wp\/v2\/posts\/808\/revisions"}],"predecessor-version":[{"id":816,"href":"http:\/\/www.zyhcoding.club\/index.php\/wp-json\/wp\/v2\/posts\/808\/revisions\/816"}],"wp:attachment":[{"href":"http:\/\/www.zyhcoding.club\/index.php\/wp-json\/wp\/v2\/media?parent=808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.zyhcoding.club\/index.php\/wp-json\/wp\/v2\/categories?post=808"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.zyhcoding.club\/index.php\/wp-json\/wp\/v2\/tags?post=808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}