{"id":14,"date":"2022-06-04T10:52:00","date_gmt":"2022-06-04T02:52:00","guid":{"rendered":"http:\/\/ubuntu.tim-wcx.ltd\/wordpress\/index.php\/2022\/06\/04\/2020-09-23-%e6%a0%91%e7%8a%b6%e6%95%b0%e7%bb%84\/"},"modified":"2022-06-04T10:52:00","modified_gmt":"2022-06-04T02:52:00","slug":"2020-09-23-%e6%a0%91%e7%8a%b6%e6%95%b0%e7%bb%84","status":"publish","type":"post","link":"https:\/\/wordpress.tim-wcx.ltd\/index.php\/2022\/06\/04\/2020-09-23-%e6%a0%91%e7%8a%b6%e6%95%b0%e7%bb%84\/","title":{"rendered":"2020-09-23 \u6811\u72b6\u6570\u7ec4"},"content":{"rendered":"<p><svg  style=\"display: none;\">\n                        <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"><\/path>\n                    <\/svg><\/p>\n<p><a href=\"http:\/\/icpc.upc.edu.cn\/problem.php?cid=2586&#038;pid=3\">http:\/\/icpc.upc.edu.cn\/problem.php?cid=2586&#038;pid=3<\/a><\/p>\n<h5><a id=\"_1\"><\/a>\u9898\u76ee\u63cf\u8ff0<\/h5>\n<p>We define B(x) as the number of digit 1 in the binary representation of x. For example, B(7) =B((111) 2 ) = 3, B(8) = B((1000) 2 ) = 1, B(9) = B((1001) 2 ) = 2.<br \/> We define F(x) = min{y j (y > x)\u2227(B(y)\u2264B(x))}. For example, F(4) = 8, F(5) = 6, F(6) = 8.<br \/> Zayin has a forest (a set of trees), whose nodes are numbered from 1 to n. For each node (e.g. node x),if F(x) is not greater than n, then the father of node x is F(x), else, node x is the root of a tree.<br \/> We use A [ i ] to denote the number of apples on the node i. Initially, all the A [ i ] (1\u2264i\u2264n) are equal to zero. In order to make his girlfriend happy, Zayin is going to perform magic on the tree. The magic consists of two types of operations:<\/p>\n<ol>\n<li>Add x v : For every ancestor of node x (including itself), put v more apples on it. In other words, for every node (e.g. node y) on the path between node x and the root of its tree, let A[y] = A[y] + v.<\/li>\n<li>Sum L R : Count the total number of apples on the nodes whose index is between L and R. In other words, you need to calculate .<img decoding=\"async\" src=\"https:\/\/img-blog.csdnimg.cn\/img_convert\/6eccfe0fff7e6b86f1b65014e432ce7a.png#pic_center\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\"><\/li>\n<\/ol>\n<h5><a id=\"_9\"><\/a>\u8f93\u5165<\/h5>\n<p>The first line contains two integers n and m (1\u2264n\u22641018 , 1\u2264m\u2264105 ), where n is the number of nodes and m is the number of operations.<br \/> The next m lines describe the m operations in order. Each line contains three integers. The first of them is op. If op = 1, then the next two integers will be x and v, representing an Add operation. If op = 2, then the next two integers will be L and R, representing a Sum operation. (1\u2264x\u2264n, 1\u2264v\u2264109 , 1\u2264L\u2264R\u2264n)<\/p>\n<h5><a id=\"_12\"><\/a>\u8f93\u51fa<\/h5>\n<p>For each Sum operation, output one line including one number, denoting the corresponding result.<\/p>\n<h5><a id=\"_14\"><\/a>\u6837\u4f8b\u8f93\u5165<\/h5>\n<pre><code>8 6\n1 1 1\n1 3 2\n1 5 3\n1 7 4\n2 1 5\n2 4 8\n<\/code><\/pre>\n<h6><a id=\"_24\"><\/a>\u6837\u4f8b\u8f93\u51fa<\/h6>\n<pre><code>10\n23\n<\/code><\/pre>\n<p>\u6811\u72b6\u6570\u7ec4<\/p>\n<pre><code class=\"prism language-cpp\"><span class=\"token macro property\">#<span class=\"token directive keyword\">pragma<\/span> GCC optimize(3)<\/span>\n<span class=\"token macro property\">#<span class=\"token directive keyword\">pragma<\/span> GCC optimize(\"Ofast\",\"uroll-loops\",\"omit-frame-pointer\",\"inline\")<\/span>\n<span class=\"token macro property\">#<span class=\"token directive keyword\">include<\/span> <span class=\"token string\"><bits\/stdc++.h><\/span><\/span>\n<span class=\"token keyword\">using<\/span> <span class=\"token keyword\">namespace<\/span> std<span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">typedef<\/span> <span class=\"token keyword\">long<\/span> <span class=\"token keyword\">long<\/span> ll<span class=\"token punctuation\">;<\/span>\nll n<span class=\"token punctuation\">;<\/span>\nunordered_map<span class=\"token operator\"><<\/span>ll<span class=\"token punctuation\">,<\/span>ll<span class=\"token operator\">><\/span>w<span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">add<\/span><span class=\"token punctuation\">(<\/span>ll k<span class=\"token punctuation\">,<\/span>ll m<span class=\"token punctuation\">)<\/span>\n<span class=\"token punctuation\">{<!-- --><\/span>\n    <span class=\"token keyword\">for<\/span><span class=\"token punctuation\">(<\/span>ll d<span class=\"token operator\">=<\/span>m<span class=\"token punctuation\">,<\/span>i<span class=\"token operator\">=<\/span>k<span class=\"token punctuation\">;<\/span>i<span class=\"token operator\"><=<\/span>n<span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">+<\/span><span class=\"token operator\">=<\/span>i<span class=\"token operator\">&<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">-<\/span>i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>d<span class=\"token operator\">+<\/span><span class=\"token operator\">=<\/span>m<span class=\"token punctuation\">)<\/span>\n        w<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token operator\">+<\/span><span class=\"token operator\">=<\/span>d<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\nll <span class=\"token function\">query<\/span><span class=\"token punctuation\">(<\/span>ll n<span class=\"token punctuation\">)<\/span>\n<span class=\"token punctuation\">{<!-- --><\/span>\n    ll sum<span class=\"token operator\">=<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token keyword\">for<\/span><span class=\"token punctuation\">(<\/span>ll i<span class=\"token operator\">=<\/span>n<span class=\"token punctuation\">;<\/span>i<span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">-<\/span><span class=\"token operator\">=<\/span>i<span class=\"token operator\">&<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">-<\/span>i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>w<span class=\"token punctuation\">.<\/span><span class=\"token function\">count<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\n            sum<span class=\"token operator\">+<\/span><span class=\"token operator\">=<\/span>w<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token keyword\">return<\/span> sum<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n<span class=\"token punctuation\">{<!-- --><\/span>\n    std<span class=\"token operator\">::<\/span>ios<span class=\"token operator\">::<\/span><span class=\"token function\">sync_with_stdio<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    std<span class=\"token operator\">::<\/span>cin<span class=\"token punctuation\">.<\/span><span class=\"token function\">tie<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n    <span class=\"token keyword\">int<\/span> k<span class=\"token punctuation\">;<\/span>\n    cin<span class=\"token operator\">>><\/span>n<span class=\"token operator\">>><\/span>k<span class=\"token punctuation\">;<\/span>\n    ll a<span class=\"token punctuation\">,<\/span>b<span class=\"token punctuation\">,<\/span>c<span class=\"token punctuation\">;<\/span>\n    <span class=\"token keyword\">for<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token operator\">=<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span>i<span class=\"token operator\"><=<\/span>k<span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">++<\/span><span class=\"token punctuation\">)<\/span>\n    <span class=\"token punctuation\">{<!-- --><\/span>\n        cin<span class=\"token operator\">>><\/span>a<span class=\"token operator\">>><\/span>b<span class=\"token operator\">>><\/span>c<span class=\"token punctuation\">;<\/span>\n        <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>a<span class=\"token operator\">==<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token punctuation\">{<!-- --><\/span>\n            <span class=\"token function\">add<\/span><span class=\"token punctuation\">(<\/span>b<span class=\"token punctuation\">,<\/span>c<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n        <span class=\"token punctuation\">}<\/span>\n        <span class=\"token keyword\">else<\/span>\n        <span class=\"token punctuation\">{<!-- --><\/span>\n            <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"%lldn\"<\/span><span class=\"token punctuation\">,<\/span><span class=\"token operator\">-<\/span><span class=\"token function\">query<\/span><span class=\"token punctuation\">(<\/span>b<span class=\"token operator\">-<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">+<\/span><span class=\"token function\">query<\/span><span class=\"token punctuation\">(<\/span>c<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n        <span class=\"token punctuation\">}<\/span>\n    <span class=\"token punctuation\">}<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>http:\/\/icpc.upc.edu.cn\/pr&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-14","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/wordpress.tim-wcx.ltd\/index.php\/wp-json\/wp\/v2\/posts\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.tim-wcx.ltd\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.tim-wcx.ltd\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.tim-wcx.ltd\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.tim-wcx.ltd\/index.php\/wp-json\/wp\/v2\/comments?post=14"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.tim-wcx.ltd\/index.php\/wp-json\/wp\/v2\/posts\/14\/revisions"}],"wp:attachment":[{"href":"https:\/\/wordpress.tim-wcx.ltd\/index.php\/wp-json\/wp\/v2\/media?parent=14"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.tim-wcx.ltd\/index.php\/wp-json\/wp\/v2\/categories?post=14"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.tim-wcx.ltd\/index.php\/wp-json\/wp\/v2\/tags?post=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}