20200505省選模擬賽A (回滾莫隊)

2021-10-05 21:03:36 字數 999 閱讀 4012

回滾莫隊裸題

然而我在考試的時候一直在想對vl,vr進行莫隊,腦子進水了。。

直接對l,r進行莫隊,就變成了線段樹單點加,區間求最大值

這樣的複雜度是o(nsqrt(q)*logm+q*logm)的

我們可以根號平衡一下,用分塊set來實現o(1)插入,o(sqrt(n))查詢(簡單實現)

但是我們發現這樣會有問題

當我們的莫隊刪除乙個點的時候,最大值需要重新計算這樣就會退化為sqrt(m),時間複雜度高達o(n*sqrt(q)*sqrt(m)+q*sqrt(m))

我們需要改進

對於左端點在同乙個塊的詢問,我們可以把他們分為一組

我們一組一組地來求解問題

如果當前的右端點與左端點同塊,就直接暴力(注意是l,r同塊,vl,vr不一定同塊,坑了我好久)

否則就可以移動先莫隊的右端點,把在塊外的點加進分塊set,最後加入在塊內的點並記錄分塊set的值變化

回答詢問後利用該記錄撤回塊內加入的點即可

**:

#include#include#includeusing namespace std;

#define n 150005

#define d 400

#define ll long long

int n,m,q;

int a[n],b[n];

int bel[n],l[n],r[n];

ll tong[n],mx[n/d+5],tmp[n/d+5];

struct node

j=i+1;

} }for(i=1;i<=q;i++)

printf("%lld\n",ans[i]);

}

省選模擬賽 project

最小割問題。建如下邊 s,i,ai 代表選用a語言編寫第i個專案 i,t,bi 代表選用a語言編寫第i個專案 其後注意要反向連邊 i,j,d 代表選用b語言編寫第i個專案,選用a語言編寫第j個專案 j,i,c 代表選用a語言編寫第i個專案,選用b語言編寫第j個專案 litc學長出的題,引文最小割題目...

mirror 省選模擬賽

標籤 狀壓dp 結論 當最優情況下,每行每列鏡子的個數都為偶數 題目可以轉化為擺放鏡子,使得格仔中產生的光環最長 所以不需要考慮鏡子到底放什麼方向 於是我們直接狀壓一列鏡子當前的奇偶性進行轉移 時間複雜度o 4n n m2 o 4 n n m2 include include include inc...

Sequence 省選模擬賽

標籤 貪心 給定乙個整數數列 a,定義f a max1 inaj aif a max1 i naj ai 保證 f a 0。你需要求出至少需要修改 a 的多少個位置才能使 f a 變小。注意,你修改之後的數也必須是整數。2 n 106 ai 109 2 n 106 ai 109 簽到題gg,自己真的...