2018暑期牛客網多校第一場簽到題 莫隊演算法

2021-08-21 14:38:12 字數 985 閱讀 4053

嗯,一元體驗場,讓人體驗到絕望。聽出題人說,這是一套沒有簽到題的區域賽難度題目。如果有簽到題,就是三題銅牌,然後我光榮一道題。算上遙遠天國的簽到題。嗯光榮兩道題打鐵。不說感想了。因為比賽是私有的。所以在這裡只能分享一下題意題解,和我ac的**。

題意:給n個數字和q次查詢,q次查詢包括兩個值。l和r,問1到l區間和r到n區間不同的數字個數的。n和q的範圍都是1e5.

題解:暴力超時加超記憶體。嗯,但是稍微改改就是裸的莫隊演算法。把n個數翻倍,那麼原來的l + n 就是r, 原來的r 就是新的l。套莫隊的板子即可

看**

#includeusing namespace std;

const int maxn = 1e5+5*2;

struct nodeq[maxn];

int n,s[maxn],pos[maxn],block;

int m;

int ans[maxn];

int val[maxn];

inline bool cmp(const node & a,const node & b)

inline void solve()

while(lef > q[i].lef)

while(rig < q[i].rig)

while(rig > q[i].rig)

if(--val[s[rig--]] == 0) ans --;

ans[q[i].id] = ans;

} return ;

}int main()

for(int i = 1; i <= n ; i ++)

pos[i] = (i-1)/block + 1;

for(int i = 1 ; i <= m ; i ++)

sort(q+1,q+1+m,cmp);

solve();

for(int i = 1; i <= m ; i++)

} return 0;

}

牛客暑期多校第一場 E Removal dp

原題要求去掉m個元素後不同的子串行個數,可轉化為求,長度為n m的不同的子串行的個數。dp i j 表示以數字i結尾的長度為j的子串行個數,ans j 表示長度為j的子串行個數。列舉序列,因為只要求ans n m 假設當前是第i個數字,那麼更新時只需要更新 i m,i 即可,因為更小的長度的子串行不...

2018 牛客多校第一場J

題意 就是給了乙個陣列a,和q個查詢l,r,問 a1 al,ar an中有多少個不同的數字 題解 首先把陣列a拷貝乙份拼接起來,這樣兩個區間 a1 al,ar an 就合併成乙個區間 ar al n 之後就是問區間上不同的數字個數,經典的題方法看這個 在陣列上將數字i出現最後乙個位置 置為1,然後就...

2018 牛客多校第一場 D

題目 題意 給你乙個小圖,乙個大圖。問你在大圖中能找到多少個形狀和小圖一樣的。思路 因為n為8,我們可以暴力找,全排列把所有情況找到,再把可行的狀態用二進位制表示,用map對映防止重複 includeusing namespace std define ll long long int mp1 11...