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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【BZOJ 2119】 2119: 股市的预测 (后缀数组+分块+RMQ)

發布時間:2025/4/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BZOJ 2119】 2119: 股市的预测 (后缀数组+分块+RMQ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2119: 股市的預測

Time Limit:?10 Sec??Memory Limit:?259 MB
Submit:?404??Solved:?188

Description

墨墨的媽媽熱愛炒股,她要求墨墨為她編寫一個軟件,預測某只股票未來的走勢。股票折線圖是研究股票的必備工具,它通過一張時間與股票的價位的函數圖像清晰地展示了股票的走勢情況。經過長時間的觀測,墨墨發現很多股票都有如下的規律:之前的走勢很可能在短時間內重現!如圖可以看到這只股票A部分的股價和C部分的股價的走勢如出一轍。通過這個觀測,墨墨認為他可能找到了一個預測股票未來走勢的方法。進一步的研究可是難住了墨墨,他本想試圖統計B部分的長度與發生這種情況的概率關系,不過由于數據量過于龐大,依賴人腦的力量難以完成,于是墨墨找到了善于編程的你,請你幫他找一找給定重現的間隔(B部分的長度),有多少個時間段滿足首尾部分的走勢完全相同呢?當然,首尾部分的長度不能為零。

Input

輸入的第一行包含兩個整數N、M,分別表示需要統計的總時間以及重現的間隔(B部分的長度)。接下來N行,每行一個整數,代表每一個時間點的股價。

Output

輸出一個整數,表示滿足條件的時間段的個數

Sample Input

12 4
1 2 3 4 8 9 1 2 3 4 8 9

Sample Output

6
【樣例說明】
6個時間段分別是:3-9、2-10、2-8、1-9、3-11、4-12。

HINT

對于100%的數據,4≤N≤50000 1≤M≤10 M≤N 所有出現的整數均不超過32位含符號整數。

Source

?

?

【分析】

  做差之后就是UVU式的題,就是像UVA10829那題了。

  所以可以看那個題解。

  然后我覺得我那時候智障。。。while找的話其實nlogn就沒用了,變成了n^2,也不知道我當時看誰的。

  但是親測,一邊sa一邊while可過,兩邊while不可過。

  但是太迷了,我把它改成了兩邊sa了。比之前就快了很多。

?

1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 #include<queue> 7 using namespace std; 8 #define Maxl 50010 9 10 int l,pp; 11 int c[Maxl],cl; 12 13 int mymin(int x,int y) {return x<y?x:y;} 14 15 struct node {int x,id;}t[Maxl]; 16 bool cmp(node x,node y) {return x.x<y.x;} 17 18 void init() 19 { 20 scanf("%d%d",&cl,&l); 21 int bf; 22 scanf("%d",&bf); 23 for(int i=2;i<=cl;i++) 24 { 25 int x; 26 scanf("%d",&x); 27 t[i-1].x=x-bf;t[i-1].id=i-1; 28 bf=x; 29 }cl--; 30 sort(t+1,t+1+cl,cmp); 31 pp=1;c[t[1].id]=1; 32 for(int i=2;i<=cl;i++) 33 { 34 if(t[i].x!=t[i-1].x) pp++; 35 c[t[i].id]=pp; 36 } 37 } 38 39 int sa[Maxl],rk[Maxl],y[Maxl],wr[Maxl],Rs[Maxl]; 40 void get_sa(int m) 41 { 42 memcpy(rk,c,sizeof(rk)); 43 for(int i=1;i<=m;i++) Rs[i]=0; 44 for(int i=1;i<=cl;i++) Rs[rk[i]]++; 45 for(int i=2;i<=m;i++) Rs[i]+=Rs[i-1]; 46 for(int i=cl;i>=1;i--) sa[Rs[rk[i]]--]=i; 47 48 int ln=1,p=0; 49 while(p<cl) 50 { 51 int k=0; 52 for(int i=cl-ln+1;i<=cl;i++) y[++k]=i; 53 for(int i=1;i<=cl;i++) if(sa[i]>ln) y[++k]=sa[i]-ln; 54 for(int i=1;i<=cl;i++) wr[i]=rk[y[i]]; 55 56 for(int i=1;i<=m;i++) Rs[i]=0; 57 for(int i=1;i<=cl;i++) Rs[wr[i]]++; 58 for(int i=2;i<=m;i++) Rs[i]+=Rs[i-1]; 59 for(int i=cl;i>=1;i--) sa[Rs[wr[i]]--]=y[i]; 60 61 for(int i=1;i<=cl;i++) wr[i]=rk[i]; 62 for(int i=cl+1;i<=cl+ln;i++) wr[i]=0; 63 p=1,rk[sa[1]]=1; 64 for(int i=2;i<=cl;i++) 65 { 66 if(wr[sa[i]]!=wr[sa[i-1]]||wr[sa[i]+ln]!=wr[sa[i-1]+ln]) p++; 67 rk[sa[i]]=p; 68 } 69 ln*=2,m=p; 70 } 71 sa[0]=rk[0]=0; 72 } 73 74 int height[Maxl]; 75 void get_he() 76 { 77 int k=0; 78 for(int i=1;i<=cl;i++) if(rk[i]!=1) 79 { 80 int j=sa[rk[i]-1]; 81 if(k) k--; 82 while(c[i+k]==c[j+k]&&i+k<=cl&&j+k<=cl) k++; 83 height[rk[i]]=k; 84 } 85 } 86 87 int d[2][Maxl][20]; 88 void rmq_init(int p) 89 { 90 for(int i=1;i<=cl;i++) d[p][i][0]=height[i]; 91 for(int j=1;(1<<j)<=cl;j++) 92 for(int i=1;i+(1<<j)-1<=cl;i++) 93 d[p][i][j]=mymin(d[p][i][j-1],d[p][i+(1<<j-1)][j-1]); 94 } 95 96 int rq[2][Maxl]; 97 int rmq(int x,int y,int p) 98 { 99 int t; 100 x=rq[p][x];y=rq[p][y]; 101 if(x>y) swap(x,y); 102 x++; 103 int k=0; 104 while((1<<k+1)<=y-x+1) k++; 105 return mymin(d[p][x][k],d[p][y-(1<<k)+1][k]); 106 } 107 108 109 void ffind() 110 { 111 int ans=0; 112 for(int i=1;i<=cl;i++) 113 { 114 for(int j=0;j<=cl/i;j++) 115 { 116 int now=j*i+1,x=1,y=0; 117 if(now+l+i>cl) continue; 118 x=mymin(i,rmq(now,now+l+i,0)); 119 y=mymin(i-1,rmq(cl-(now+l+i-1)+1,cl-(now-1)+1,1)); 120 if(x+y-i+1>0&&x!=0) ans+=x+y-i+1; 121 } 122 } 123 printf("%d\n",ans); 124 } 125 126 int cc[Maxl]; 127 128 int main() 129 { 130 init(); 131 get_sa(pp);for(int i=1;i<=cl;i++) rq[0][i]=rk[i]; 132 get_he();rmq_init(0); 133 for(int i=1;i<=cl;i++) cc[i]=c[cl-i+1]; 134 for(int i=1;i<=cl;i++) c[i]=cc[i]; 135 get_sa(pp); 136 for(int i=1;i<=cl;i++) rq[1][i]=rk[i]; 137 get_he(); 138 rmq_init(1); 139 ffind(); 140 return 0; 141 } View Code

?

2017-03-24?14:42:24

轉載于:https://www.cnblogs.com/Konjakmoyu/p/6611445.html

總結

以上是生活随笔為你收集整理的【BZOJ 2119】 2119: 股市的预测 (后缀数组+分块+RMQ)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 香蕉大人久久国产成人av | 国产人妖ts | 成人免费无码av | 九色porny视频 | 女人av| 天天操天天干天天操 | 草久久| 武林美妇肉伦娇喘呻吟 | 伊人影院久久 | 黄色网页观看 | 女生张开腿让男生插 | 亚洲成人免费视频 | 男人的天堂亚洲 | 91在线网| 国产欧美综合一区 | 久久久久久久久久久久久国产 | 欧美精品videos另类 | 久久久久久18 | 97视频精品 | 91精品国产综合久久福利 | 男人的天堂在线 | 国产精品yy | 久久久久欧美 | 久久国产色 | 久草高清 | 亚洲精品视频在线观看免费视频 | 懂色av,蜜臀av粉嫩av | 成人黄色大全 | 中文在线观看免费 | 91在线最新 | 日韩精品久久久久久久酒店 | 亚洲色图视频在线观看 | av免费观看网站 | 伊人婷婷久久 | 亚洲综合99| 成人午夜sm精品久久久久久久 | 东方成人av在线 | 色哟哟网站入口 | 国产操女人 | 欧美一区二区三区免费在线观看 | 性一交一乱一区二区洋洋av | 伊人中文网 | 女人叫床很黄很污句子 | 国产一区二区三区福利 | 免费高清av | 欧美日韩黄色 | 亚洲天堂一区二区 | 婷婷国产 | 国产精品无码永久免费不卡 | 美女光屁屁露胸胸 | 91欧美日韩麻豆精品 | 日韩激情在线观看 | 久久婷婷国产麻豆91天堂 | 亚洲成人网在线观看 | 天天操狠狠操夜夜操 | 欧美亚洲黄色 | 网站一区二区 | 香蕉一级片 | 欧洲最强rapper网站直播 | 91 在线视频 | 日韩在线观看免费高清 | 久久久久亚洲 | 伊人久久大香线蕉av色婷婷色 | 国产精品二区一区二区aⅴ污介绍 | 欧美日韩a√ | 日韩爱爱视频 | 久久人人爽爽 | h片在线观看网站 | 综合色导航 | 中文字幕Av日韩精品 | 日韩欧美在线观看一区 | 狠狠操婷婷 | 香蕉成视频人app下载安装 | 女人脱下裤子让男人捅 | 中文国产在线观看 | 黄页网址大全免费观看 | 久久久久精| 一区二区三区免费观看 | 欧美午夜精品一区 | 被各种性器调教到哭vk | 性高潮影院 | 人超碰| 久草视频这里只有精品 | 国产美女精品久久 | 精品国产午夜福利 | 99久精品 | 成人精品视频在线播放 | 久久视频99| 97免费公开视频 | 日韩精品电影一区二区三区 | 中国字幕一色哟哟 | 日本a视频在线观看 | 黄色一区二区视频 | 国产又粗又猛又爽又黄的视频一 | 国产综合视频一区二区 | 67194成人| 毛片av网址 | 日本成人三级 | 欧美在线你懂的 |