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

算法學社
記錄難忘的征途
posts - 141,comments - 220,trackbacks - 0

題目簡介:

    給一個長度為N(N<600,000)的序列,讓你按順序插入靜態(tài)二叉樹。然后DFS出一個序列,問某個模式串在這個序列中出現(xiàn)了幾次?

吐槽:

    被KMP卡了一個晚上是什么水平? 數(shù)組開小了WA了一下午是什么水平?

算法分析:

    比較難想的是如何實現(xiàn)這個靜態(tài)二叉樹,因為要一個DFS序列,所以組織靜態(tài)二叉樹是不可逃避的了。
    這里用到一個結論,就是新插入的數(shù)的父親,要么是比它大的最小的那個元素,要么是比它小的最大的那個元素。
    然后套一個KMP就水過了。。。。
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cassert>
 5 using namespace std;
 6 const int N = 600005;
 7 template <typename T> inline void chkmin(T &a,T b){if(a>b) a=b;}
 8 template <typename T> inline void chkmax(T &a,T b){if(a<b) a=b;}
 9 bool ch[N<<2];
10 char parten[10000];
11 int nxt[N],seg[N<<2][2], stk[N], vis[N], hash[N];
12 const int inf = ~0u>>2;
13 struct tree{
14     int l,r,v;
15     tree(){}
16     tree(int _l,int _r,int _v) : l(_l), r(_r), v(_v) {}
17 } num[N];
18 int n,len;
19 int main(){
20     int test,M;
21     cin >> test;
22     for(int _=1;_<=test;_++){
23         cin >> n;
24         int v,val;
25         for(int i=30;i>=0;i--) if((1<<i)>=n) M = 1<<i;
26         for(int i=0;i<2*M;i++) seg[i][1] = -1, seg[i][0] = inf;
27         for(int i=0;i<n;i++){
28             scanf("%d",&v);
29             val = v;
30             hash[val] = i;
31             if(i==0) {
32                 num[0] = tree(-1,-1,v); 
33                 v += M-1;
34                 while(v){seg[v][0] = seg[v][1] = val;v>>=1;}
35                 continue;
36             }
37             num[i] = tree(-1,-1,v);
38             int mn = -1, mx = inf;
39             for(v += M-1; v; v>>=1){
40                 chkmin(seg[v][0],val);
41                 chkmax(seg[v][1],val);
42                 if(v&1) chkmax(mn,seg[v^1][1]);
43                 else chkmin(mx, seg[v^1][0]);
44             }
45             //cout<<val<<" "<<mn<<" "<<mx<<endl;
46             if(mn == -1 || num[hash[mn]].r !=-1){
47                 num[hash[mx]].l = i;
48             } else num[hash[mn]].r = i;
49         }
50         len = 0;
51         
52         for(int i=0;i<n;i++) vis[i] = 0;
53         int tp = 0,u;stk[0] =0;
54         while(!vis[0]) {
55             u = stk[tp];
56             ch[len++] = num[u].v & 1;
57             v = num[u].l;
58             if(v!=-1 && !vis[v]) {stk[++tp] = v; continue;}
59             v = num[u].r;
60             if(v!=-1 && !vis[v]) {stk[++tp] = v; continue;}
61             tp--;
62             vis[u] = 1;
63         }
64 //        for(int i=0;i<len;i++) cout<<ch[i]<<" ";cout<<endl;
65         
66         scanf("%s",parten);
67         nxt[0] = -1; int m = strlen(parten);
68         int j = -1;
69         for(int i=0;i<m;i++) parten[i] -='0';
70         for(int i=1;i<m;i++){
71             while(j>=0 && parten[i]!=parten[j+1])    
72                 j=nxt[j];
73             if(parten[i]==parten[j+1]) j++; 
74             nxt[i] = j;
75         }
76 //        for(int i=0;i<m;i++) cout<<nxt[i]<<" "; cout<<endl;
77         int ans = 0; j = -1;
78         for(int i=0;i<len;i++){
79 //            cout<<j<<" ";
80             while(j>=0 && parten[j+1]!=ch[i]) j = nxt[j]; 
81             if(parten[j+1]==ch[i]) 
82                 j++;
83             if(j == m-1) {
84                 ans++;
85                 j = nxt[j];
86             }
87         }
88         printf("Case #%d: %d\n",_,ans);
89     }
90 }
91 
posted on 2012-07-02 15:14 西月弦 閱讀(622) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            中国女人久久久| 欧美亚洲网站| 欧美在线免费观看| 亚洲在线视频观看| 国产精品一二一区| 欧美一区高清| 欧美风情在线观看| 亚洲国产你懂的| 美女国产一区| 99精品视频免费在线观看| 日韩视频在线免费| 国产精品国产精品| 久久久久一区二区三区| 亚洲国产成人av在线| 亚洲日本成人在线观看| 国产精品videossex久久发布| 亚洲免费人成在线视频观看| 久久精品99无色码中文字幕| 亚洲激情黄色| 国产欧美精品日韩精品| 女女同性精品视频| 亚洲欧美视频在线观看| 欧美国产丝袜视频| 先锋影音久久久| 亚洲欧洲在线免费| 国产精品中文在线| 欧美精品久久久久久久免费观看| 欧美一区二区三区免费看| 亚洲日韩视频| 亚洲国产成人av| 欧美激情综合色| 激情综合网激情| 国产在线精品一区二区中文| 狂野欧美激情性xxxx| 久久电影一区| 欧美成人一区二区三区在线观看| 国产综合久久久久久鬼色| 欧美伊人精品成人久久综合97| 一本色道久久综合亚洲精品不卡| 在线不卡亚洲| 亚洲三级视频| 99re8这里有精品热视频免费 | 亚洲欧美经典视频| 亚洲国产高清一区二区三区| 久热精品在线视频| 美女黄毛**国产精品啪啪| 久久久综合网站| 免费成人在线观看视频| 欧美寡妇偷汉性猛交| 亚洲二区精品| 在线一区二区三区做爰视频网站| 日韩写真在线| 久久国产精品久久w女人spa| 久久久久久**毛片大全| 久久久精品tv| 香蕉国产精品偷在线观看不卡| 亚洲婷婷综合久久一本伊一区| 亚洲精品在线观看免费| 亚洲五月六月| 久久综合九色欧美综合狠狠| 欧美激情一区二区三区高清视频| 91久久国产综合久久| 亚洲永久免费观看| 欧美精品一区二区三区久久久竹菊 | 免费观看日韩av| 欧美精品手机在线| 国产日韩欧美一区| 国产精品99久久久久久久vr| 欧美一区三区二区在线观看| 欧美成人按摩| 欧美一区二区三区免费视| 欧美人妖另类| 亚洲精品乱码久久久久久| 欧美专区在线观看| 一区二区免费在线播放| 久久精品国产69国产精品亚洲 | 亚洲人成人99网站| 久久国产欧美精品| 亚洲尤物精选| 国产精品美女999| 中文欧美在线视频| 亚洲精品资源| 欧美色综合天天久久综合精品| 亚洲精品久久久蜜桃| 亚洲第一黄色网| 欧美二区不卡| 日韩午夜电影在线观看| 亚洲国产欧美久久| 欧美高清在线一区| 日韩五码在线| 亚洲免费一在线| 国产私拍一区| 欧美成人免费全部观看天天性色| 欧美在线影院| 亚洲无线一线二线三线区别av| 国产精品国产自产拍高清av| 亚洲主播在线| 久久久久se| 日韩一级不卡| 午夜一区二区三视频在线观看| 一区在线影院| 亚洲精品偷拍| 国产一区二区0| 亚洲欧洲日产国产综合网| 欧美私人网站| 欧美大片免费观看| 亚洲免费激情| 在线观看日韩www视频免费 | 午夜视频精品| 亚洲精品资源| 久久er99精品| 性18欧美另类| 欧美日韩另类丝袜其他| 另类欧美日韩国产在线| 欧美日韩在线电影| 亚洲二区视频在线| 精品av久久707| 亚洲制服av| 亚洲欧美精品伊人久久| 欧美高清视频| 欧美电影专区| 黄色亚洲在线| 久久aⅴ乱码一区二区三区| 亚洲视频网站在线观看| 欧美成va人片在线观看| 久久综合电影| 国内精品久久久| 午夜日韩视频| 久久一区二区三区四区| 激情成人av在线| 久久精品一区四区| 久久久五月天| 亚洲国内精品| 欧美精品v国产精品v日韩精品| 亚洲第一毛片| aa级大片欧美三级| 欧美日韩亚洲一区三区| 一区二区三区日韩欧美| 亚洲欧美日韩精品久久亚洲区 | 亚洲色在线视频| 欧美午夜剧场| 亚洲在线观看免费视频| 久久久噜噜噜| 亚洲精品视频在线看| 欧美日韩一区二区在线观看| 亚洲亚洲精品三区日韩精品在线视频| 亚洲一区二区三区成人在线视频精品 | 久久久人成影片一区二区三区观看| 亚洲女爱视频在线| 欧美黑人一区二区三区| 中文久久精品| 在线看无码的免费网站| 麻豆精品视频在线观看| 亚洲一区免费| 亚洲激情自拍| 久久人人97超碰精品888| 亚洲午夜影视影院在线观看| 免费一级欧美在线大片| 亚洲伊人伊色伊影伊综合网| 狠狠色综合色区| 欧美午夜无遮挡| 免费一区视频| 久久久久高清| 亚洲伊人观看| 国内精品伊人久久久久av一坑| 免费人成精品欧美精品| 国产精品久久久久久久久果冻传媒 | 好看不卡的中文字幕| 欧美日韩高清在线一区| 欧美一二三区精品| 亚洲一二三区视频在线观看| 亚洲激情欧美| 亚洲国产精品成人综合色在线婷婷| 久久av一区| 久久男人av资源网站| 欧美一区二区性| 欧美在线观看视频一区二区| 亚洲中午字幕| 久久精品国产综合| 久久久久久久久伊人| 久久精品一二三区| 久久婷婷国产综合尤物精品| 久久精品一二三| 99综合在线| 亚洲私人黄色宅男| 欧美亚洲在线观看| 久久久精品五月天| 免费成人你懂的| 亚洲少妇在线| 久久精品夜色噜噜亚洲aⅴ| 久久夜色精品国产欧美乱| 欧美国产日本韩| 国产精品日韩电影| 一区三区视频| 午夜欧美理论片| 欧美粗暴jizz性欧美20| 99精品国产高清一区二区 | 亚洲人成久久| 亚洲午夜性刺激影院| 久久久九九九九|