日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[bzoj2743]采花

發布時間:2024/4/17 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [bzoj2743]采花 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

預處理出每一個點下一個相同顏色的位置,記為next,然后將詢問按左端點排序后不斷右移左指針,設要刪除i位置,就令f[next[next[i]]+1,同時還要刪除原來的標記,即令f[next[i]]-1,最后即詢問$\sum_{i=1}^{r}f[i]$,線段樹維護即可。

1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 2000005 4 #define L (k<<1) 5 #define R (L+1) 6 #define mid (l+r>>1) 7 struct ji{ 8 int x,y,id; 9 bool operator < (const ji &a)const{ 10 return x<a.x; 11 } 12 }q[N]; 13 int n,m,l,ans[N],a[N],fi[N],nex[N],f[N<<2]; 14 void update(int k,int l,int r,int x,int y){ 15 if (l==r){ 16 f[k]+=y; 17 return; 18 } 19 if (x<=mid)update(L,l,mid,x,y); 20 else update(R,mid+1,r,x,y); 21 f[k]=f[L]+f[R]; 22 } 23 int query(int k,int l,int r,int x,int y){ 24 if ((l>y)||(x>r))return 0; 25 if ((x<=l)&&(r<=y))return f[k]; 26 return query(L,l,mid,x,y)+query(R,mid+1,r,x,y); 27 } 28 int main(){ 29 scanf("%d%*d%d",&n,&m); 30 for(int i=1;i<=n;i++)scanf("%d",&a[i]); 31 for(int i=n;i;i--){ 32 nex[i]=fi[a[i]]; 33 fi[a[i]]=i; 34 } 35 for(int i=1;i<N-4;i++) 36 if (nex[fi[i]])update(1,1,n,nex[fi[i]],1); 37 for(int i=1;i<=m;i++){ 38 scanf("%d%d",&q[i].x,&q[i].y); 39 q[i].id=i; 40 } 41 sort(q+1,q+m+1); 42 l=1; 43 for(int i=1;i<=m;i++){ 44 while (l<q[i].x){ 45 if (nex[l])update(1,1,n,nex[l],-1); 46 if (nex[nex[l]])update(1,1,n,nex[nex[l]],1); 47 l++; 48 } 49 ans[q[i].id]=query(1,1,n,q[i].x,q[i].y); 50 } 51 for(int i=1;i<=m;i++)printf("%d\n",ans[i]); 52 } View Code

?

轉載于:https://www.cnblogs.com/PYWBKTDA/p/11249710.html

總結

以上是生活随笔為你收集整理的[bzoj2743]采花的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。