青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

coreBugZJ

此 blog 已棄。

EOJ 2458 Frequent values

  1/*
  2EOJ 2458 Frequent values
  3
  4
  5----問題描述:
  6
  7You are given a sequence of n integers a1 , a2 ,  , an in non-decreasing order.
  8In addition to that, you are given several queries consisting of indices i and j (1 ≤ i ≤ j ≤ n).
  9For each query, determine the most frequent value among the integers ai ,  , aj.
 10
 11
 12----輸入:
 13
 14The input consists of several test cases.
 15Each test case starts with a line containing two integers n and q (1 ≤ n, q ≤ 100000).
 16The next line contains n integers a1 ,  , an (-100000 ≤ ai ≤ 100000, for each i ∈ {1, , n}) separated by spaces.
 17You can assume that for each i ∈ {1, , n-1}: ai ≤ ai+1.
 18The following q lines contain one query each, consisting of two integers i and j (1 ≤ i ≤ j ≤ n),
 19which indicate the boundary indices for the query.
 20 
 21The last test case is followed by a line containing a single 0.
 22
 23
 24----輸出:
 25
 26For each query, print one line with one integer:
 27The number of occurrences of the most frequent value within the given range.
 28
 29
 30----樣例輸入:
 31
 3210 3
 33-1 -1 1 1 1 1 3 10 10 10
 342 3
 351 10
 365 10
 370
 38
 39
 40----樣例輸出:
 41
 421
 434
 443
 45
 46
 47----分析:
 48
 49方案一,
 50線段樹,樹中結點保存
 51        左端,右端,最頻  的實際數值;
 52        左端,右端,最頻  的數值的頻度;
 53        左右端點。
 54
 55方案二,
 56RMQ ST 算法。
 57
 58*/

 59
 60
 61
 62/**********************************************
 63版本二:
 64AC 1019MS
 65RMQ ST 算法。
 66*/

 67
 68
 69#include <iostream>
 70#include <cstdio>
 71#include <cmath>
 72#include <algorithm>
 73
 74using namespace std;
 75
 76const int L = 100009;
 77
 78template<class T = int, unsigned int L = 100009, unsigned int L2 = 18>
 79class  RmqSt
 80{
 81public : 
 82        int init( T a[], int le, int ri) {
 83                int i, j, k;
 84
 85                fr[ le ] = le;
 86                for ( i = le+1; i < ri; ++i ) {
 87                        if ( a[ i ] == a[ i - 1 ] ) {
 88                                fr[ i ] = fr[ i - 1 ];
 89                        }

 90                        else {
 91                                fr[ i ] = i;
 92                        }

 93                }

 94
 95                la[ ri-1 ] = ri;
 96                for ( i = ri-1; i > le; --i ) {
 97                        if ( a[ i ] == a[ i - 1 ] ) {
 98                                la[ i - 1 ] = la[ i ];
 99                        }

100                        else {
101                                la[ i - 1 ] = i;
102                        }

103                }

104
105                for ( i = le; i < ri; ++i ) {
106                        f[ i ][ 0 ] = 1;
107                }

108                k = 1;
109                while ( (1 << k) <= ri - le ) {
110                        for ( i = ri - (1<<k); i >= le; --i ) {
111                                j = i + (1<<(k-1));
112                                f[ i ][ k ] = max(f[i][k-1], f[j][k-1]);
113                                if ( a[ j ] == a[ j - 1 ] ) {
114                                        f[ i ][ k ] = max(f[i][k], min(la[j], i+(1<<k)) - max(fr[j], i));
115                                }

116                        }

117                        ++k;
118                }

119                return 0;
120        }

121        int query(int le, int ri) {
122                int k = (int)(floor(log(((double)(ri)) - le) / log(2.0)));
123                int j = ri - (1<<k);
124                int q = max(f[le][k], f[j][k]);
125                if ( (le < j) && (a[j] == a[j-1]) ) {
126                        q = max(q, min(la[j], ri) - max(fr[j], le));
127                }

128                j = le + (1<<k);
129                if ( (j < ri) && (a[j] == a[j-1])) {
130                        q = max(q, min(la[j], ri) - max(fr[j], le));
131                }

132                return q;
133        }

134
135private : 
136        T    f[ L ][ L2 ];
137        int  fr[ L ], la[ L ]; // fr[i] 表示 a[i] 第一次出現的位置,la 類似,表最后
138}
;
139
140RmqSt<int> prob;
141int a[ L ];
142int n;
143
144int main() {
145        int i, q, le, ri;
146        while ( (1 == scanf("%d"&n)) && (0 < n) ) {
147                scanf("%d"&q);
148                for ( i = 1; i <= n; ++i ) {
149                        scanf("%d", a+i);
150                }

151                prob.init(a, 1, n+1);
152                while ( q-- > 0 ) {
153                        scanf("%d%d"&le, &ri);
154                        printf("%d\n", prob.query(le, ri+1));
155                }

156        }

157        return 0;
158}

159
160
161
162/**********************************************
163版本一:
164AC 941 MS
165線段樹。
166*/

167/*
168#include <iostream>
169#include <cstdio>
170#include <algorithm>
171
172using namespace std;
173
174const int L = 100009;
175
176template<class T = int, unsigned int L = 100009>
177class  SegTree
178{
179public : 
180        int init(T a[], int le, int ri) {
181                this->a  = a;
182                return this->init(1, le, ri);
183        }
184        int query(int le, int ri) {
185                this->le = le;
186                this->ri = ri;
187                Node  qr;
188                return this->query(1, qr);
189        }
190
191private : 
192        struct  Node
193        {
194                T   lv, rv, mv; // 左端,右端,最頻  值
195                int ln, rn, mn; // 左端,右端,最頻  頻
196                int le, ri;     // 左右端點
197        };
198        Node  node[ L * 3 ];
199
200        T     *a;
201        int   le, ri;
202
203        int init(int idx, int le, int ri) {
204                if ( le + 1 == ri ) {
205                        node[ idx ].le = le;
206                        node[ idx ].ri = ri;
207                        node[ idx ].lv = node[ idx ].rv = node[ idx ].mv = a[ le ];
208                        node[ idx ].ln = node[ idx ].rn = node[ idx ].mn = 1;
209                        return 1;
210                }
211                int lc = (idx<<1);
212                int rc = (idx<<1)|1;
213                init(lc, le,         (le+ri)>>1);
214                init(rc, (le+ri)>>1, ri        );
215
216                node[ idx ].le = le;
217                node[ idx ].ri = ri;
218                node[ idx ].lv = node[ lc ].lv;
219                node[ idx ].ln = node[ lc ].ln;
220                node[ idx ].rv = node[ rc ].rv;
221                node[ idx ].rn = node[ rc ].rn;
222                if ( node[ lc ].mn < node[ rc ].mn ) {
223                        node[ idx ].mn = node[ rc ].mn;
224                        node[ idx ].mv = node[ rc ].mv;
225                }
226                else {
227                        node[ idx ].mn = node[ lc ].mn;
228                        node[ idx ].mv = node[ lc ].mv;
229                }
230
231                if ( node[ lc ].rv == node[ rc ].lv ) {
232                        if ( node[ lc ].lv == node[ lc ].rv ) {
233                                node[ idx ].ln += node[ rc ].ln;
234                        }
235                        if ( node[ rc ].lv == node[ rc ].rv ) {
236                                node[ idx ].rn += node[ lc ].rn;
237                        }
238                        if ( node[ idx ].mn < node[ lc ].rn + node[ rc ].ln ) {
239                                node[ idx ].mn = node[ lc ].rn + node[ rc ].ln;
240                                node[ idx ].mv = node[ lc ].rv;
241                        }
242                }
243                return 1;
244        }
245        int query(int idx, Node &qr) {
246                if ( (this->le <= node[idx].le) && (node[idx].ri <= this->ri) ) {
247                        qr = node[ idx ];
248                        return qr.mn;
249                }
250                if ( (this->le >= node[idx].ri) || (this->ri <= node[idx].le) ) {
251                        qr.le = -1;
252                        qr.ri = -2;
253                        qr.ln = qr.rn = qr.mn = 0;
254                        qr.lv = qr.rv = qr.mv = 0;
255                        return 0;
256                }
257                int lc  = (idx<<1);
258                int rc  = (idx<<1)|1;
259                int mid = (node[idx].le + node[idx].ri)>>1;
260
261                if ( (this->le < mid) && ( this->ri > mid) ) {
262                        Node qle, qri;
263                        query(lc, qle);
264                        query(rc, qri);
265
266                        qr.le = le;
267                        qr.ri = ri;
268                        qr.lv = qle.lv;
269                        qr.ln = qle.ln;
270                        qr.rv = qri.rv;
271                        qr.rn = qri.rn;
272                        if ( qle.mn < qri.mn ) {
273                                qr.mn = qri.mn;
274                                qr.mv = qri.mv;
275                        }
276                        else {
277                                qr.mn = qle.mn;
278                                qr.mv = qle.mv;
279                        }
280
281                        if ( qle.rv == qri.lv ) {
282                                if ( qle.lv == qle.rv ) {
283                                        qr.ln += qri.ln;
284                                }
285                                if ( qri.lv == qri.rv ) {
286                                        qr.rn += qle.rn;
287                                }
288                                if ( qr.mn < qle.rn + qri.ln ) {
289                                        qr.mn = qle.rn + qri.ln;
290                                        qr.mv = qle.rv;
291                                }
292                        }
293
294                        return qr.mn;
295                }
296                if ( this->ri > mid ) {
297                        return query(rc, qr);
298                }
299                return query(lc, qr);
300        }
301};
302
303SegTree<int> prob;
304int a[ L ];
305int n;
306
307int main() {
308        int i, q, le, ri;
309        while ( (1 == scanf("%d", &n)) && (0 < n) ) {
310                scanf("%d", &q);
311                for ( i = 1; i <= n; ++i ) {
312                        scanf("%d", a+i);
313                }
314                prob.init(a, 1, n+1);
315                while ( q-- > 0 ) {
316                        scanf("%d%d", &le, &ri);
317                        printf("%d\n", prob.query(le, ri+1));
318                }
319        }
320        return 0;
321}
322*/

323

posted on 2012-04-22 22:48 coreBugZJ 閱讀(671) 評論(0)  編輯 收藏 引用 所屬分類: ACM 、Algorithm 、DataStructure課內作業

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜精品亚洲| 模特精品在线| 久久一区免费| 久久婷婷综合激情| 久久夜色精品国产噜噜av| 欧美在线二区| 欧美日韩国产在线播放网站| 欧美一区精品| 久久久久国产精品人| 久久人体大胆视频| 欧美成人一区在线| 男女视频一区二区| 欧美性jizz18性欧美| 国产精品成人观看视频免费 | 久久精品日产第一区二区| 欧美一乱一性一交一视频| 亚洲伊人一本大道中文字幕| 在线午夜精品| 久久成人久久爱| 欧美精品久久天天躁| 国产精品青草久久| 在线观看视频免费一区二区三区| 夜夜嗨一区二区| 在线成人亚洲| 伊人久久亚洲美女图片| 国产在线精品成人一区二区三区| 亚洲国产成人午夜在线一区| 亚洲精品九九| 亚洲欧美日韩成人| 久久gogo国模裸体人体| 久久九九有精品国产23| 午夜视频一区在线观看| 欧美国产日韩亚洲一区| 99国产精品私拍| 午夜精品国产| 欧美日韩视频在线一区二区 | 国产一区二区在线观看免费播放 | 亚洲国产精品成人精品| 欧美国产高清| 亚洲在线视频免费观看| 欧美电影免费观看高清| 国产日韩欧美综合精品| 一本色道**综合亚洲精品蜜桃冫| 久久手机免费观看| 亚洲欧美成人综合| 欧美久久久久久久久| 在线欧美影院| 欧美在线播放| 亚洲视频电影在线| 欧美承认网站| 亚洲欧洲另类| 欧美成人激情视频| 久久久免费精品视频| 国产欧美精品一区二区三区介绍 | 欧美激情一区二区三级高清视频| 国产精品免费一区二区三区在线观看| 激情综合色综合久久| 在线日韩欧美视频| 亚洲影院一区| 99国产精品视频免费观看| 欧美本精品男人aⅴ天堂| 一区二区三区亚洲| 欧美综合第一页| 制服诱惑一区二区| 美女久久一区| 欧美一区二区啪啪| 亚洲另类春色国产| 欧美在线|欧美| 欧美日韩三级视频| 亚洲精品日韩久久| 猫咪成人在线观看| 狂野欧美性猛交xxxx巴西| 激情五月综合色婷婷一区二区| 亚洲视频中文字幕| 亚洲图片欧美午夜| 国产精品欧美日韩| 久久国产精品久久久久久久久久 | 久久综合九色综合久99| 午夜国产精品影院在线观看| 国产精品综合网站| 久久精品成人欧美大片古装| 午夜影视日本亚洲欧洲精品| 欧美无砖砖区免费| 欧美一级理论性理论a| 午夜精品久久久久久久久| 国产精品一级二级三级| 香蕉免费一区二区三区在线观看| 亚洲欧美日本国产有色| 国产一区二区高清不卡| 久色成人在线| 欧美日韩亚洲在线| 久久精品一区二区三区四区| 老司机午夜精品视频| 一区二区三区欧美在线观看| 亚洲永久字幕| 亚洲国产婷婷香蕉久久久久久| 亚洲美女视频在线观看| 国产性色一区二区| 亚洲国产精品第一区二区三区| 欧美视频官网| 欧美精品一区二区三区在线看午夜 | 99精品免费视频| 国产一区二区福利| 亚洲精选在线| 国产欧美日韩综合精品二区| 欧美韩日高清| 国产视频在线一区二区 | 午夜精品久久久久影视| 亚洲日本aⅴ片在线观看香蕉| 亚洲一区二区黄色| 99riav1国产精品视频| 欧美一区午夜精品| 亚洲先锋成人| 欧美成人性生活| 久久久天天操| 精品1区2区| 久久蜜桃精品| 欧美理论大片| 久久亚洲欧洲| 国产精品日韩专区| 亚洲国产精品久久| 国产精品久久久久aaaa樱花| 欧美激情免费在线| 伊人色综合久久天天五月婷| 99re6这里只有精品| 亚洲美女在线看| 亚洲性色视频| 亚洲性感美女99在线| 欧美freesex交免费视频| 久久高清一区| 国产欧美一区二区三区国产幕精品| 久久天天躁夜夜躁狠狠躁2022| 欧美亚洲第一页| 亚洲精品久久久久| 在线播放豆国产99亚洲| 久久爱www| 久久大综合网| 国产精品永久| 亚洲欧美日韩国产一区| 午夜精品福利一区二区三区av| 欧美系列一区| 夜夜嗨av一区二区三区免费区| 99精品视频免费观看| 欧美精品麻豆| 一本到高清视频免费精品| 日韩午夜电影av| 欧美另类一区二区三区| 亚洲精品乱码久久久久久日本蜜臀| 激情久久久久久久| 乱码第一页成人| 亚洲国产专区| 亚洲丝袜av一区| 国产精品一区=区| 久久激情视频免费观看| 蜜臀av一级做a爰片久久| 最新亚洲激情| 欧美性久久久| 欧美在线free| 亚洲第一区在线观看| 夜夜嗨av一区二区三区网页| 欧美乱大交xxxxx| 亚洲午夜精品福利| 快射av在线播放一区| 亚洲国产成人午夜在线一区| 欧美福利电影网| 亚洲一区999| 久久五月婷婷丁香社区| 亚洲精品美女| 国产欧美大片| 欧美阿v一级看视频| 中文成人激情娱乐网| 久久久久久久999精品视频| 亚洲精品综合| 国产日产欧美一区| 欧美1区3d| 亚洲婷婷免费| 欧美激情va永久在线播放| 亚洲无限乱码一二三四麻| 国产视频观看一区| 欧美暴力喷水在线| 欧美专区在线| 一本一本a久久| 久久综合给合久久狠狠色| 一区二区三区四区五区视频 | 久久久久久久一区二区三区| 欧美电影在线观看| 亚洲一区www| 亚洲国产欧美一区二区三区同亚洲 | 欧美人与禽猛交乱配| 亚洲欧美制服另类日韩| 亚洲国产日韩一区| 久久全国免费视频| 亚洲女同同性videoxma| 91久久精品日日躁夜夜躁国产| 国产精品手机视频| 欧美日韩免费一区二区三区视频| 久久久久久久91| 亚洲综合色婷婷| 这里只有精品在线播放| 欧美激情麻豆|