2018 牛客多校第一場J

2021-08-21 16:18:40 字數 687 閱讀 1999

題意: 就是給了乙個陣列a,和q個查詢l,r,問 a1-al,ar-an中有多少個不同的數字

題解:首先把陣列a拷貝乙份拼接起來,這樣兩個區間 a1~al, ar~an 就合併成乙個區間 ar~al+n

之後就是問區間上不同的數字個數,經典的題方法看這個:

在陣列上將數字i出現最後乙個位置 置為1,然後就可以樹狀陣列區間求和了

把詢問離線處理按照r的先後排序,具體處理看**orz

#includeusing namespace std;

struct ques

}que[100009];

int ans[100009],a[200009],last[200009],n,q;//last[i]維護數字i最後出現的位置

int bit[200009];//樹狀陣列,數字i最後出現的位置為1——bit[last[i]]=1;

int main()

int t=0;

//區間求和,字首相減

for (int k=m;k;k-=k&-k)t+=bit[k];

for (int k=que[i].l-1;k;k-=k&-k)t-=bit[k];

ans[que[i].id]=t;

}

for (int i=0;i} return 0;

}

2018 牛客多校第一場 J(線段樹)

題目 題意 給你n個數字,給你查詢l,r,讓你得出1 l 加上r n裡不同的數有幾個。思路 直接把1 n的數字再重新連線到1 n後面,這樣你只要求解 r,l n 的區間不同個數,但是如果l比r大的話,就是求整個區間。預處理完後,再用線段樹操作。include include include incl...

2018 牛客多校第一場 D

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

2018牛客多校第一場 dp Removal

參考部落格 題意 乙個陣列s,長度為n n 1e5 陣列元素s i 10,要求從中刪除m m 10 個數字,求能得到多少個不重複的結果,mod 1e9 7 思路 注意坑點在二維陣列的初始化,直接 szieof dp 是不行的 還有取模也需要略微注意,只要遇到減法,就要進行先加後取模。include ...