[luoguP2801] 教主的魔法(二分 + 分塊)

傳送門

?

以為對于這類問題線段樹都能解決,分塊比線段樹菜,結果培訓完才知道線段樹是一種特殊的分塊方法,有的分塊的題線段樹不能做,看來分塊還是有必要學的。

對于這個題,先分塊,然后另開一個數組對于每個塊內排序。

區間加的話,加一個標記,每一個整塊區間加,里面的數的相對大小不變,而左右兩邊零散的塊直接暴力重構。

查詢可以對于每個塊二分查找。

時間復雜度應該是 nlogn + Q√nlog√n,剛好卡過。。

?

注意:第10個點會被卡,手寫二分比stl的lower_bound快一點,可以避免被卡。

   也可以在 S = sqrt(n) 后面 + x,x 不要太大也不要太小,不知道為什么,速度也會快點,玄學啊。

%%%有些dalao不知道怎么寫的,1000ms

?

——代碼(最終只能優化到1600ms)

  1 #include <cmath>
  2 #include <cstdio>
  3 #include <iostream>
  4 #include <algorithm>
  5 #define LL long long
  6 
  7 const int MAXN = 1000001;
  8 int n, q, S, C;
  9 int belong[MAXN], st[MAXN], ed[MAXN];
 10 LL a[MAXN], b[MAXN], add[MAXN];
 11 
 12 inline LL read()
 13 {
 14     LL x = 0, f = 1;
 15     char ch = getchar();
 16     for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
 17     for(; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
 18     return x * f;
 19 }
 20 
 21 inline int find(int x, int y, int z)
 22 {
 23     int mid;
 24     while(x < y)
 25     {
 26         mid = (x + y) >> 1;
 27         if(b[mid] >= z) y = mid;
 28         else x = mid + 1;
 29     }
 30     return x;
 31 }
 32 
 33 inline void retreat(int x, int y)
 34 {
 35     int i;
 36     for(i = x; i <= y; i++) b[i] = a[i];
 37     std::sort(b + x, b + y + 1);
 38 }
 39 
 40 inline void init()
 41 {
 42     int i, j;
 43     S = int(sqrt(n)) + 10;
 44     for(i = 1; i <= n; i++) scanf("%d", &a[i]);
 45     for(i = 1; i <= n; i += S)
 46     {
 47         st[++C] = i;
 48         ed[C] = std::min(i + S - 1, n);
 49     }
 50     for(i = 1; i <= C; i++)
 51         for(j = st[i]; j <= ed[i]; j++)
 52             belong[j] = i;
 53     for(i = 1; i <= C; i++) retreat(st[i], ed[i]);
 54 }
 55 
 56 inline void update(int x, int y, LL z)
 57 {
 58     int i, l = belong[x], r = belong[y];
 59     if(l == r)
 60     {
 61         for(i = x; i <= y; i++) a[i] += z;
 62         retreat(st[l], ed[r]);
 63     }
 64     else
 65     {
 66         for(i = x; i <= ed[l]; i++) a[i] += z;
 67         for(i = l + 1; i <= r - 1; i++) add[i] += z;
 68         for(i = st[r]; i <= y; i++) a[i] += z;
 69         retreat(st[l], ed[l]);
 70         retreat(st[r], ed[r]);
 71     }
 72 }
 73 
 74 inline int query(int x, int y, LL z)
 75 {
 76     int i, l = belong[x], r = belong[y], ans = 0;
 77     if(l == r) return y + 1 - find(x, y + 1, z - add[l]);
 78     ans += ed[l] - find(x, ed[l] + 1, z - add[l]) + 1;
 79     for(i = l + 1; i <= r - 1; i++) ans += ed[i] - find(st[i], ed[i] + 1, z - add[i]) + 1;
 80     ans += y - find(st[r], y + 1, z - add[r]) + 1;
 81     return ans;
 82 }
 83 
 84 int main()
 85 {
 86     int i, j, x, y;
 87     LL z;
 88     char ch;
 89     n = read();
 90     q = read();
 91     init();
 92     for(i = 1; i <= q; i++)
 93     {
 94         while ((ch=getchar()) < 'A' || ch > 'Z');
 95         x = read();
 96         y = read();
 97         z = read();
 98         if(ch == 'M') update(x, y, z);
 99         else printf("%d\n", query(x, y, z));
100     }
101     return 0;
102 }
View Code

?

轉載于:https://www.cnblogs.com/zhenghaotian/p/6823527.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392924.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392924.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392924.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙系統適配開發,捕獲科技擬建立鴻蒙開發組 為區塊鏈錢包客戶適配鴻蒙系統做籌備...

遭遇美國“實體清單”封殺的第85天&#xff0c;華為“鴻蒙”橫空出世&#xff01;8月9日下午&#xff0c;在華為全球開發者大會上&#xff0c;當余承東正式宣布鴻蒙系統(Harmony OS)發布的時候&#xff0c;全場掌聲雷動&#xff01;世界上第一個由中國企業自主研發的全平臺微內…

[arm驅動]linux內核中斷編程

第一部分獲取中斷(開啟硬件中斷)一、中斷的申請注銷: 1&#xff09;中斷的申請 12int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id) 2)中斷的注銷 1void free_irq(unsigned int irq, void *dev_id) 3&am…

關于VCP(Virtual Com Port)拓展的調試經歷(一)

* The Overview 前日&#xff0c;接到老板部署的任務&#xff0c;將現有的基于STM32L151與L432的LoRaWAN程序中添加USB CDC(Communication Device Class)功能&#xff0c;并枚舉為VCP(Virtual Com Port)用以替代以往的串口打印。很疑惑為什么以前架構代碼的時候沒有添加進去。。…

leetcode701. 二叉搜索樹中的插入操作(dfs)

給定二叉搜索樹&#xff08;BST&#xff09;的根節點和要插入樹中的值&#xff0c;將值插入二叉搜索樹。 返回插入后二叉搜索樹的根節點。 輸入數據保證&#xff0c;新值和原始二叉搜索樹中的任意節點值都不同。注意&#xff0c;可能存在多種有效的插入方式&#xff0c;只要樹在…

三星s6 android 8.0,再見Android 8.0,三星s6全系列系統都停止了,第一代國王已經倒下了嗎?...

對于Android用戶而言&#xff0c;最令人興奮的事情是系統更新&#xff0c;因為該更新意味著更流暢的體驗和更加用戶友好的功能. 但是&#xff0c;舊的三星S6并不是那么幸運&#xff0c;并且不再錯過Android 8.0.三星s6的全系列指的是三星s6&#xff0c;三星s6 edge&#xff0c;…

devise tree_Devise如何確保您的Rails應用密碼安全

devise treeby Tiago Alves由蒂亞戈阿爾維斯(Tiago Alves) Devise如何確保您的Rails應用密碼安全 (How Devise keeps your Rails app passwords safe) Devise is an incredible authentication solution for Rails with more than 40 million downloads. However, since it ab…

Exchange 2010無法安裝問題解決方法

當你在活動目錄(AD)森林中安裝多臺全局編錄服務器(GC)之后,默認情況下你會發現在AD站點里面自動生成二條站點連接,從上面的截圖可以看到目前在AD森林的Default-First-Site-Name(默認站點)里面有6臺GC。 從上面的截圖可以看到目前只有一臺叫做Sh-Site1GC(全局編錄服務器)是處于運…

android edittext 不滾動,EditText 設置可以垂直滑動但是不可輸入

一、前言&#xff1a;android:id"id/edtInput"android:layout_width"match_parent"android:layout_height"60dp"android:background"drawable/round_theme_3_gray"android:gravity"top"android:hint"string/please_inp…

snmpd修改端口

http://blog.csdn.net/cau99/article/details/5077239 http://blog.csdn.net/gua___gua/article/details/48547701轉載于:https://www.cnblogs.com/diyunpeng/p/6829592.html

leetcode LCP 19. 秋葉收藏集(dp)

小扣出去秋游&#xff0c;途中收集了一些紅葉和黃葉&#xff0c;他利用這些葉子初步整理了一份秋葉收藏集 leaves&#xff0c; 字符串 leaves 僅包含小寫字符 r 和 y&#xff0c; 其中字符 r 表示一片紅葉&#xff0c;字符 y 表示一片黃葉。 出于美觀整齊的考慮&#xff0c;小扣…

步進電機 步距角 編碼器_我如何邁出了學習編碼的第一步

步進電機 步距角 編碼器A couple of months ago, I was chatting to a developer at work about how I’ve always wanted to learn to code but never tried.幾個月前&#xff0c;我正在與一個開發人員聊天&#xff0c;討論我一直想學習編碼但從未嘗試過的方法。 Coding alwa…

第五章:配置使用FastJson返回Json視圖

fastJson是阿里巴巴旗下的一個開源項目之一&#xff0c;顧名思義它專門用來做快速操作Json的序列化與反序列化的組件。它是目前json解析最快的開源組件沒有之一&#xff01;在這之前jaskJson是命名為快速操作json的工具&#xff0c;而當阿里巴巴的fastJson誕生后jaskjson就消聲…

一加6android9玩飛車掉,解鎖新速度:一加6T深度評測

解鎖新速度&#xff1a;一加6T深度評測2019-11-02 14:28:595點贊2收藏4評論創作立場聲明&#xff1a;我們只談智能硬件&#xff0c;向改變生活的智能硬件Say“嗨”&#xff01;作為安卓旗艦機成員&#xff0c;一加這個品牌在玩機一類的同學手里可是大放光彩&#xff0c;各種刷機…

設計模式(第十七式:迭代器模式)

概念&#xff1a;  迭代器模式&#xff1a;Provide a way to access the elements of an aggregarte object sequentiaally with exposing its underlying representation. 提供一種訪問容器對象內每個元素的一種方式&#xff0c;并且不暴露對象的一些內部細節。實現&#xf…

探討跨域請求資源的幾種方式

[轉自&#xff1a;http://www.cnblogs.com/dojo-lzz/p/4265637.html] 什么是跨域JSONPproxy代理corsxdr由于瀏覽器同源策略&#xff0c;凡是發送請求url的協議、域名、端口三者之間任意一與當前頁面地址不同即為跨域。具體可以查看下表&#xff08;來源&#xff09; JSONP 這種…

算法訓練營 重編碼_編碼訓練營適合您嗎?

算法訓練營 重編碼by Joanna Gaudyn喬安娜高登(Joanna Gaudyn) 編碼訓練營適合您嗎&#xff1f; (Is a Coding Bootcamp something for you?) Coding bootcamps’ popularity is growing. It sounds like a perfect idea to fast-forward your career. But is it really some…

leetcode 771. 寶石與石頭(set)

給定字符串J 代表石頭中寶石的類型&#xff0c;和字符串 S代表你擁有的石頭。 S 中每個字符代表了一種你擁有的石頭的類型&#xff0c;你想知道你擁有的石頭中有多少是寶石。 J 中的字母不重復&#xff0c;J 和 S中的所有字符都是字母。字母區分大小寫&#xff0c;因此"a…

用ntdsutil命令中的restore object 更新版本號

備份域控建立好后&#xff0c;備份域信息&#xff0c;用目錄還 原模式&#xff0c;還原域信息&#xff0c;用ntdsutil命令&#xff0c;中的 restore ob ject 更新版本號 本文轉自9pc9com博客&#xff0c;原文鏈接&#xff1a; http://blog.51cto.com/215363/783334 如需…

python處理excel文件(xls和xlsx)

一、xlrd和xlwt 使用之前需要需要先安裝&#xff0c;windows上如果直接在cmd中運行python則需要先執行pip3 install xlrd和pip3 install xlwt&#xff0c;如果使用pycharm則需要在項目的解釋器中安裝這兩個模塊&#xff0c;File-Settings-Project:layout-Project Interpreter&a…

html塊中的內容垂直居中,css如何設置行內元素與塊級元素的內容垂直居中

首先我們先了解一下行內元素和塊級元素行內元素(內聯元素)&#xff1a;沒有自己的獨立空間&#xff0c;它是依附于其他塊級元素存在的&#xff0c;空間大小依附于內容多少。行內元素沒有度、寬度、內外邊距等屬性。塊級元素&#xff1a;占據獨立的空間&#xff0c;具有寬度&…