寶石專家 離線

2022-05-20 22:51:13 字數 1276 閱讀 5365

\(n\)個寶石帶權值\(a_i\)從\(1\)排到\(n\),\(m\)次詢問,問區間\([l,r]\)中權值相同的寶石的最近距離

離線做法的好題。

我們將所有詢問按\(r\)排序,預處理出lp[i]lp[i]表示與位置\(i\)上的寶石有相同權值的上乙個寶石位置為\(lp[i]\),然後每次在區間\([l,r]\)(\(l,r\)處是相同權值的寶石)的\(r\)處對線段樹單點修改更新貢獻\(i-lp[i]\)(區間長度),線段樹維護區間最小,每次查詢即查\([q[i].l,n]\)的區間最小值。因為已將詢問按\(r\)排序,所以可以保證正確性。

具體還是看**:

#include #include #include using namespace std;

int n,m;

inline int read()

while(ch>='0'&&ch<='9') s=s*10+(ch^'0'),ch=getchar();

if(w) return -s;

return s;

}#define maxn 200002

int a[maxn],a_sort[maxn];

int idx[maxn];

struct nodq[maxn];

int ans[maxn];

bool cmp(const nod &a, const nod &b)

void change(int x, int l, int r, int pos, int val)

int mid=(l+r)>>1;

if(pos<=mid) change(sl, l, mid, pos, val);

else change(sr, mid+1, r, pos, val);

tre[x]=min(tre[sl], tre[sr]);

}int query(int x, int l, int r, int ql, int qr)

int main()

buildt(1, 1, n);

for(int i=1;i<=m;++i) q[i].l=read(),q[i].r=read(),q[i].id=i;

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

int pos=1;

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

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

return 0;

}

python寶石與石頭 771 寶石與石頭

給定字串j 代表石頭中寶石的型別,和字串 s代表你擁有的石頭。s 中每個字元代表了一種你擁有的石頭的型別,你想知道你擁有的石頭中有多少是寶石。j 中的字母不重複,j 和 s中的所有字元都是字母。字母區分大小寫,因此 a 和 a 是不同型別的石頭。示例 1 輸入 j aa s aaabbbb 輸出 3...

寶石排列問題

西安交大 軟體53 蔡少斐 題號 5 10 題目敘述 現有n種不同形狀的寶石,每種n顆,共n n顆。同一形狀的n顆寶石分別具有n種不同的顏色c1,c2,cn中的一種顏色。欲將這n n顆寶石排列成n行n列的乙個方陣,使方陣中每一行和每一列的寶石都有n種不同的形狀和n種不同顏色。是設計乙個演算法,計算出...

4976 寶石鑲嵌

題目大意自己看吧 題目鏈結 題解 mx為所有val中最大的 1 如果n k log mx 的話,就直接把所有數或起來就好了。2 否則的話就dp,f i j 表示前i個和為j所用的最少數,這個很好dp,注意一下會爆空間,滾一下吧。具體詳見 by cx lzx include include inclu...