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

2021-08-21 16:12:15 字數 920 閱讀 3017

題目

題意:給你n個數字,給你查詢l,r,讓你得出1-l 加上r-n裡不同的數有幾個。

思路:直接把1-n的數字再重新連線到1-n後面,這樣你只要求解[r,l+n]的區間不同個數,但是如果l比r大的話,就是求整個區間。預處理完後,再用線段樹操作。

**:

#include#include#include#include#includeusing namespace std;

const int n=2e5+10;

int n,m;

int cnt[n<<2];

struct qu

q[n];

bool cmp(qu a,qu b)

int mid=(l+r)/2;

int s=0;

if(l<=mid)s+=query(x*2,l,r,l,mid);

if(r>mid)s+=query(x*2+1,l,r,mid+1,r);

return s;

}int a[n],b[n];

int ans[n];

int main()

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

int z=2*n;

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

int k=q[i].l+n;

q[i].l=q[i].r;

q[i].r=k;

q[i].i=i;

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

mapmp;

mp.clear();

for(int i=1,j=1;i<=2*n;i++)

else

while(j<=m&&q[j].r==i)

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

}return 0;

}

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...

2018牛客多校第一場 dp Removal

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