[bzoj1012](JSOI2008)最大數maxnumber(Fenwick Tree)

Description

現在請求你維護一個數列,要求提供以下兩種操作: 1、 查詢操作。語法:Q L 功能:查詢當前數列中末尾L個數中的最大的數,并輸出這個數的值。限制:L不超過當前數列的長度。 2、 插入操作。語法:A n 功能:將n加上t,其中t是最近一次查詢操作的答案(如果還未執行過查詢操作,則t=0),并將所得結果對一個固定的常數D取模,將所得答案插入到數列的 末尾。限制:n是非負整數并且在長整范圍內。注意:初始時數列是空的,沒有一個數。

Input

第一行兩個整數,M和D,其中M表示操作的個數(M <= 200,000),D如上文中所述,滿足(0

Output

對于每一個查詢操作,你應該按照順序依次輸出結果,每個結果占一行。

Sample Input

5 100
A 96
Q 1
A 97
Q 1
Q 2

Sample Output

96
93
96

分析

? ?? 由于區間min/max信息不可減,這里似乎不可能直接用樹狀數組實現。但我們發現,這里的插入和查詢都是在末尾進行的,如果我們把數組倒過來,每次在前面插入一個數,或者查詢一個前綴數組的最值,就只需要利用最值的可合并性質就可以實現了。

? ?? ——本來以為我這個做法爆掉了線段樹還可以排進前幾名來著……然而衡中的ztx同學卻發現這個數組的最值信息可以直接用一個單調數組(棧)維護,而查詢操作只要在數組上二分查找L就可以了……給跪了Orzorzorz

?

ExpandedBlockStart.gif
?1?/**************************************************************
?2?????Problem:?1012
?3?????User:?AsmDef
?4?????Language:?C++
?5?????Result:?Accepted
?6?????Time:364?ms
?7?????Memory:2836?kb
?8?****************************************************************/
?9??
10?//Asm_Def
11?#include?<iostream>
12?#include?<cctype>
13?#include?<cstdio>
14?#include?<vector>
15?#include?<algorithm>
16?#include?<cmath>
17?#include?<queue>
18?using?namespace?std;
19?template<typename?T>inline?void?getd(T?&x){
20?????char?c?=?getchar();
21?????bool?minus?=?0;
22?????while(!isdigit(c)?&&?c?!=?'-')c?=?getchar();
23?????if(c?==?'-')minus?=?1,?c?=?getchar();
24?????x?=?c?-?'0';
25?????while(isdigit(c?=?getchar()))x?=?x?*?10?+?c?-?'0';
26?????if(minus)x?=?-x;
27?}
28?/*======================================================*/
29?const?int?maxn?=?200002;
30?typedef?long?long?LL;
31?inline?int?lowbit(int?x){return?x?&?-x;}
32?struct?Fenwick{
33?????LL?A[maxn];
34?????int?iter;
35?????Fenwick():iter(maxn?-?1){}
36?????inline?void?insert(LL?x){
37?????????A[iter]?=?x;
38?????????int?i?=?iter?+?lowbit(iter);--iter;
39?????????while(i?<?maxn){
40?????????????if(x?>?A[i])A[i]?=?x;
41?????????????i?+=?lowbit(i);
42?????????}
43?????}
44?????inline?int?getmax(int?L){
45?????????int?i?=?iter?+?L,?ans?=?0;
46?????????while(i?>=?iter){
47?????????????if(ans?<?A[i])ans?=?A[i];
48?????????????i?^=?lowbit(i);
49?????????}
50?????????return?ans;
51?????}
52?}BIT;
53?int?main(){
54?????#if?defined?DEBUG
55?????freopen("test",?"r",?stdin);
56?????#else
57?????//freopen("bzoj_1012.in",?"r",?stdin);
58?????//freopen("bzoj_1012.out",?"w",?stdout);
59?????#endif
60?????LL?D,?x,?t?=?0;
61?????int?M,?opt;
62?????getd(M),?getd(D);
63?????while(M--){
64?????????while(!isalpha(opt?=?getchar()));
65?????????getd(x);
66?????????if(opt?==?'Q')
67?????????????printf("%d\n",?t?=?BIT.getmax(x));
68?????????else?BIT.insert((t?+?x)?%?D);
69?????}
70??????
71??????
72?????#if?defined?DEBUG
73?????cout?<<?endl?<<?(double)clock()/CLOCKS_PER_SEC?<<?endl;
74?????#endif
75?????return?0;
76?}
Fenwick Tree

?

轉載于:https://www.cnblogs.com/Asm-Definer/p/4369516.html

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

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

相關文章

javaScript轉換日期合格式

javascript如何將時間日期轉換為Date對象:有時候需要講一個字符串型的時間日期轉換為Date時間對象&#xff0c;下面就通過一個簡單的實例提供一種解決方案&#xff0c;當然也是一種思路&#xff0c;可以進行一定的變通&#xff0c;以達到舉一反三的效果。例如這里有一個時間日期…

8086減法指令SUB

減法指令SUB(SUBtraction) SUB OPRD1,OPRD2 ; OPRD1<-- OPRD1-OPRD2 都影響FLAG標志寄存器,同樣的包含兩種含義(有符號減法和無符號減法)

奇怪吸引子---Dadras

奇怪吸引子是混沌學的重要組成理論&#xff0c;用于演化過程的終極狀態&#xff0c;具有如下特征&#xff1a;終極性、穩定性、吸引性。吸引子是一個數學概念&#xff0c;描寫運動的收斂類型。它是指這樣的一個集合&#xff0c;當時間趨于無窮大時&#xff0c;在任何一個有界集…

8086 INC, DEC

INC OPRD ;OPRD<--OPRD1 ;自加1指令code segmentmov ax,0inc ax ;ax<--ax1 ,ax1inc ax ;ax<--ax1 ,ax2code endsDEC OPRD ;OPRD<--OPRD-1 ;自減1指令code segmentmov ax,5dec ax ;ax<--ax-1 ,ax4 code ends

iPhone UITableViewCell如何滾動到視圖頂端。

如何讓UITableViewCell滾動到視圖頂端。 - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;- (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)s…

app 一些常用的

發短信 &#xff1a;sms:10086 打電話&#xff1a;tel:10086 1、-webkit-tap-highlight-color:rgba(255,255,255,0)可以同時屏蔽ios和android下點擊元素時出現的陰影。備注&#xff1a;transparent的屬性值在android下無效。 2、-webkit-appearance:none可以同時屏蔽輸入框怪異…

8086乘法指令MUL,IMUL

對于加減指令來說CPU對有符號加減和無符號加減一視同仁,根據我們需要把它作為有符號的結果還是無符號的結果,但是乘除法指令區分有符號乘除和無符號乘除指令 無符號數乘法指令MUL(MULtiply) MUL OPRD(OPRD可以用除立即數以外的任何尋址方式)OPRD是八位一個乘數默認在AL中 則&am…

hdu 4857 逃生 拓撲排序

逃生題目連接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid4857 Description 糟糕的事情發生啦&#xff0c;現在大家都忙著逃命。但是逃命的通道很窄&#xff0c;大家只能排成一行。 現在有n個人&#xff0c;從1標號到n。同時有一些奇怪的約束條件&#xff0c;每個…

指針數組,數組指針,指針函數,函數指針(轉)

int *p[4]; //指針數組。 是個有4個元素的數組&#xff0c; 每個元素的是指向整型的指針。(數組的每個元素都是指針)int (*p)[4]; //數組指針。 它是一個指針&#xff0c;指向有4個整型元素的數組。 (一個指針指向有4個整型元素的數組)int *…

8086除法指令DIV,IDIV

無符號除法指令DIV(DIVision) DIV OPRD ;除數OPRD決定是8位除法還是16位除法;OPRD8位,則被除數默認在AX中,AX除以OPRD的商保存在AL中,余數保存在AH中;OPRD16位,則被除數默認在DX與AX中,結果的商保存在AX中,余數保存到DX中assume cs:code data segmentdb 2,4 data ends code se…

Hibernate 基礎配置及常用功能(二)

本章主要是描述幾種經典映射關系&#xff0c;順帶比較Hibernate4.x和Hibernate5.x之間的區別。 一、建立測試工程目錄 有關實體類之間的相互映射關系&#xff0c;Hibernate官方文檔其實描述的非常詳細&#xff0c;這里只提供幾種常見映射。&#xff08;推薦4.3.11版本的 hibern…

三言兩語

人生中總是在選擇。每當做一件事我們都應該問問我們的內心&#xff0c;或多或少我們都能理解一點人生的真諦。 最近時間很充裕&#xff0c;也就想了好多事情。首先我想明白的第一件事就是做任何事就要勇敢的去面對、去追求。喜歡一個女孩子大概有8年了吧&#xff01;這期間我們…

8086邏輯移位指令SHL和SHR

SHL邏輯左移指令 SHL OPRD M;把操作數OPRD左移M位,M為位移次數,為1或為CL(位移超過1次用CL表示) ;每移動一位右邊用0補足一位,移出的最高位進入CF(最后移出的一位寫入CF) MOV AL,00010011B ;13H 00010011B SHL AL,1 ;把AL左移1位,移出的最高位0進入CF,右邊0補足1位…

YTU 2903: A--A Repeating Characters

2903: A--A Repeating Characters 時間限制: 1 Sec 內存限制: 128 MB提交: 50 解決: 30題目描述 For this problem,you will write a program that takes a string of characters,S,and creates a new string of characters,T,with each character repeated R times.That is,…

JavaScript 模擬裝飾者模式

/*** 抽象coffee父類&#xff0c;其實可以不用的*/ function Coffee () {} Coffee.prototype.cost function() {throw 實現這個方法; }; /*** 黑咖啡&#xff0c;其實可以不用繼承的&#xff1b;*/ function BlackCoffee () {} // BlackCoffee.prototype new Coffee(); // Bl…

8086算術移位指令SAL和SAR

SAL算術左移指令同邏輯左移指令進行相同動作,機器指令一樣,只是為了方便記憶而提供的兩個助記符 SAR算術右移指令 SAR OPRD,M ;該指令使操作數右移M位,每移動1位左邊的符號保持不變,移出的最低位進入CF mov al,26H ;00100110B 右移1位 00010011B sar al,1 ;26H/2H13H mov a…

const 和readonly

原文:http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html 關于 const和readonly修飾符之間的區別,要牽涉到C#中兩種不同的常量類型: 靜態常量(compile-time constants) 和動態常量(runtime constants) 靜態常量是指編譯器在編譯時候會對常量進行解析,并將常量的…

Objective - C 小談:UIPickerView 和 UIDatePicker的基本使用

1.UIPickerView 1.1. UIPickerView的常見屬性 // 數據源(用來告訴UIPickerView有多少列多少行) property(nonatomic,assign) id<UIPickerViewDataSource> dataSource;// 代理(用來告訴UIPickerView每1列的每1行顯示什么內容,監聽UIPickerView的選擇) property(nonatomic,…

8086移位指令

8086有如下3條一般移位指令 SAR OPRD,M ;算術右移 對無符號數和有符號數而言右移1位相當于原數除以2 SHR OPRD,M ;邏輯右移 對無符號數右移1位相當于原數除以2 SHL OPRD,M/SAL OPRD,M ;邏輯/算術左移(兩個助記符只有一個機器指令,進行相同的動作)左移1位相當于原數*2

ADO連接ACCESS數據庫

首先在StdAfx.h中加入 建立連接&#xff1a;(在xxApp文件中) 1 聲明變量 2 建立連接 (1) AfxOleInit 初始化 OLE 為應用程序的支持。 BOOL AFXAPI AfxOleInit( ); 返回值 非零&#xff0c;如果成功;0&#xff0c;如果初始化失敗&#xff0c;可能&#xff0c;因為安裝該 OLE 系…