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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bzoj3747 [POI2015]Kinoman

發(fā)布時(shí)間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj3747 [POI2015]Kinoman 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  線段樹,記錄next[i]下一部與當(dāng)前電影一樣的位置,然后枚舉區(qū)間左端點(diǎn)i,詢問線段樹最大值后刪除i到next[i-1]這段區(qū)間的觀影值,且增加next[i]到next[next[i]]-1這段區(qū)間的觀影值。

  

  代碼,跑的有點(diǎn)慢

  

1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 const int N = 5001010; 5 const int M = 2000010; 6 int pos[M],a[M],b[M]; 7 int n,m,i,next[M]; 8 long long ans,s[N],v[N]; 9 void clean(int x) 10 { 11 if (v[x]) 12 { 13 s[x]+=v[x]; 14 v[2*x]+=v[x]; 15 v[2*x+1]+=v[x]; 16 v[x]=0; 17 } 18 } 19 void change(int x,int l,int r,int a,int b,int c) 20 { 21 clean(x); 22 if ((a<=l)&&(r<=b)) 23 { 24 v[x]+=c; 25 return; 26 } 27 int m=(l+r)>>1; 28 if (a<m) change(2*x,l,m,a,b,c); 29 if (m<b) change(2*x+1,m,r,a,b,c); 30 clean(2*x);clean(2*x+1); 31 s[x]=max(s[2*x],s[2*x+1]); 32 } 33 int main() 34 { 35 scanf("%d%d",&n,&m); 36 for (i=1;i<=n;i++) 37 scanf("%d",&a[i]); 38 for (i=1;i<=m;i++) 39 scanf("%d",&b[i]); 40 for (i=1;i<=n;i++) 41 { 42 if (pos[a[i]]) next[pos[a[i]]]=i; 43 pos[a[i]]=i; 44 } 45 for (i=1;i<=n;i++) if (next[i]==0) next[i]=n+1; 46 47 for (i=1;i<=m;i++) pos[i]=0; 48 for (i=1;i<=n;i++) 49 { 50 if (pos[a[i]]==0) change(1,0,n,i-1,next[i]-1,b[a[i]]); 51 pos[a[i]]=1; 52 } 53 54 for (i=1;i<=n;i++) 55 { 56 clean(1);ans=max(ans,s[1]); 57 change(1,0,n,i-1,next[i]-1,-b[a[i]]); 58 if (next[i]!=n+1) 59 change(1,0,n,next[i]-1,next[next[i]]-1,b[a[next[i]]]); 60 } 61 printf("%lld\n",ans); 62 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/fzmh/p/5467221.html

總結(jié)

以上是生活随笔為你收集整理的bzoj3747 [POI2015]Kinoman的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。