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