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

The Fourth Dimension Space

枯葉北風(fēng)寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢(mèng)令

關(guān)于浙大月賽B題 快速尋找第k小數(shù)...

這個(gè)題我是用線段樹來做的,結(jié)果居然是超時(shí)。。。后來foreverlin同學(xué)告訴我他用樹狀數(shù)組過的,但我記得樹狀數(shù)組能解決的問題,線段樹一定能解決,而且線段樹的復(fù)雜度是logL級(jí)別,為什么我會(huì)超時(shí)呢?還請(qǐng)各位大牛指點(diǎn)。。。
我的代碼如下:

#include<iostream>
#include
<cstdio>
#include
<cstring>
#include
<cmath>
using namespace std;
#define MAX 300001
int a[MAX];


struct node
{
    
    
int left;
    
int right;
    
int level;
    
int cnt;
    node 
*lchild;
    node 
*rchild;
}
dotset[MAX];
int cou;
node 
*Newnode()
{
    
    node 
*p=&dotset[cou];
    cou
++;
    p
->level=0;
    p
->cnt=0;
    p
->left=0;
    p
->right=0;
    p
->lchild=NULL;
    p
->rchild=NULL;
    
return p;
}



void Build(node *&tree,int left,int right)
{
    tree
=Newnode();
    tree
->left=left;
    tree
->right=right;
    
if(left==right)
    
{
        
return;
    }

    
int mid=(left+right)>>1;
    Build(tree
->lchild,left,mid);
    Build(tree
->rchild,mid+1,right);
}

int p=1;
void Insert(node *tree,int k,int num)
{
    tree
->cnt+=num;
    
if(tree->left==tree->right)
    
{
        tree
->level=p;
        p
++;
        
return;
    }

    
int mid=(tree->left+tree->right)>>1;
    
if(k>mid)
        Insert(tree
->rchild,k,num);
    
else
        Insert(tree
->lchild,k,num);
}

void Insert2(node *tree,int k,int num)
{
    tree
->cnt-=a[k];
    tree
->cnt+=num;
    
if(tree->left==tree->right)
    
{
        
return;
    }

    
if(k>(tree->left+tree->right)>>1)
        Insert2(tree
->rchild,k,num);
    
else
        Insert2(tree
->lchild,k,num);
}


int Query(node *tree,int k)
{
    
if(tree->left==tree->right)
        
return tree->level;
    
int t=tree->lchild->cnt;
    
if(k<=t)
        Query(tree
->lchild,k);
    
else 
        Query(tree
->rchild,k-t);
}



int main()
{

    
int n;
    
int q;
    node 
*root;
    
while(scanf("%d",&n)!=EOF)
    
{
        cou
=0;
        Build(root,
1,n);
        p
=1;
        
int i;
        
for(i=1;i<=n;i++)
        
{
            
int t;
            scanf(
"%d",&a[i]);
            Insert(root,i,a[i]);
        }

        scanf(
"%d",&q);
        
for(i=1;i<=q;i++)
        
{
            
int t;
            
char s;
            cin.ignore();
            scanf(
"%c",&s);
            
if(s=='q')
            
{
                scanf(
"%d",&t);
                printf(
"%d\n",Query(root,t));
            }

            
else if(s=='p')
            
{
                
int a1,b1;
                scanf(
"%d%d",&a1,&b1);
                Insert2(root,a1,b1);
                a[a1]
=b1;
            }




        }

        
    }

    
return 0;
}

順便發(fā)幾句牢騷,為啥我做浙大的題總是不順呢(當(dāng)然其實(shí)我也是第二次做浙大的比賽)。。。浙大好像總喜歡出極限數(shù)據(jù),即使算法對(duì)了,也不讓我們快速地通過,總是要優(yōu)化到最佳才行。這樣做好處是比賽的時(shí)候?qū)嵙?huì)更過硬一些吧,畢竟可以說 我們連浙大那么BT的數(shù)據(jù)都過了,算法肯定是最好的了。。。下次提前做好心理準(zhǔn)備吧。。。

下午花了一個(gè)小時(shí) 終于弄懂了樹狀數(shù)組,總算把這題過了,感覺樹狀數(shù)組實(shí)現(xiàn)起來比線段樹容易得多,效率也高得多,非常實(shí)用。
#include<iostream>
#include
<cmath>
#include
<algorithm>
#include
<cstring>
using namespace std;

int n,q;
int a[100001],c[100001];

int lowbit(int k)
{
    
return k&(k^(k-1));
}


void update(int x,int num)
{
    
while(x<=n)
    
{
        c[x]
+=num;
        x
+=lowbit(x);     
    }
 
}
    
int query(int x)
{
    
int sum=0;
    
while(x>0)
    
{
        sum
+=c[x];
        x
-=lowbit(x);    
    }

    
return sum;      
}


int find(int t)
{

    
int l=1;
    
int r=n;
    
int min;
    
    
while(l<r)
    
{
        
int mid=(l+r)>>1;
        
if(query(mid)>=t&&query(mid-1)<t)
            
return mid;
        
else if(query(mid)>=t)
            r
=mid-1;
        
else 
            l
=mid+1;
    }

    
return r;//剛好為最后一個(gè)查找點(diǎn)
}



int main()
{
    
int i,j;
    
int t;
    
char s[2];
    
while(scanf("%d",&n)!=EOF)
    
{

        
for(i=1;i<=n;i++)c[i]=0;
        
for(i=1;i<=n;i++)
        
{

            scanf(
"%d",&a[i]);
            update(i,a[i]);
        }

        scanf(
"%d",&q);
        
while(q--)
        
{
            scanf(
"%s",s);
            
if(s[0]=='q')
            
{

                scanf(
"%d",&t);
                printf(
"%d\n",find(t));
            }

            
else 
            
{
                
int t1,t2;
                scanf(
"%d%d",&t1,&t2);
                update(t1,
-a[t1]);
                a[t1]
=t2;
                update(t1,a[t1]);
            }


        }

        
    }

    
return 0;
}



posted on 2009-12-15 00:36 abilitytao 閱讀(1847) 評(píng)論(7)  編輯 收藏 引用

評(píng)論

# re: 關(guān)于浙大月賽B題 快速尋找第k小數(shù)... 2009-12-17 11:19 diwayou

我有個(gè)問題納悶,你用了一堆的C++頭文件,程序里用的全是C的函數(shù),why  回復(fù)  更多評(píng)論   

# re: 關(guān)于浙大月賽B題 快速尋找第k小數(shù)... 2009-12-17 12:40 abilitytao

@diwayou
我用的就是C的 --!  回復(fù)  更多評(píng)論   

# re: 關(guān)于浙大月賽B題 快速尋找第k小數(shù)... 2009-12-17 17:00 wxq

你整的太復(fù)雜了...沒那個(gè)必要!  回復(fù)  更多評(píng)論   

# re: 關(guān)于浙大月賽B題 快速尋找第k小數(shù)... 2009-12-21 00:26 abilitytao

@wxq
請(qǐng)問有什么更好的方法嗎?請(qǐng)指教:-)  回復(fù)  更多評(píng)論   

# re: 關(guān)于浙大月賽B題 快速尋找第k小數(shù)... 2009-12-27 23:41 MasterLuo

樹狀數(shù)組與線段樹應(yīng)該都是可以過的。不過可以用樹狀數(shù)組的地方就沒必要用線段樹了。  回復(fù)  更多評(píng)論   

# re: 關(guān)于浙大月賽B題 快速尋找第k小數(shù)... 2011-05-03 17:54 seeyou

呃~~能寫點(diǎn)注釋么?這樣看不明白呀,謝謝啦  回復(fù)  更多評(píng)論   


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品理论片| 影视先锋久久| 欧美亚洲一区三区| 一区二区三区精品国产| 亚洲免费电影在线观看| 欧美凹凸一区二区三区视频| 猛干欧美女孩| 亚洲国产精品一区| 免费试看一区| 亚洲国产视频一区二区| 亚洲理伦电影| 亚洲欧美日韩直播| 久久久蜜臀国产一区二区| 欧美暴力喷水在线| 欧美午夜精品久久久久久孕妇| 国产精品国产精品| 狠狠色伊人亚洲综合成人| 亚洲精品一二三区| 欧美影院精品一区| 亚洲成人在线视频播放| 亚洲天堂偷拍| 麻豆精品91| 国产日韩一区二区| 99视频精品免费观看| 性欧美18~19sex高清播放| 久久人人97超碰精品888| 亚洲国产天堂网精品网站| 亚洲综合成人在线| 欧美肥婆在线| 激情综合色丁香一区二区| 99成人精品| 久久伊人免费视频| 亚洲图片欧洲图片av| 久久一区二区三区四区| 99精品国产福利在线观看免费| 久久精品二区| 国产精品欧美激情| 99香蕉国产精品偷在线观看| 先锋影音久久久| 欧美夫妇交换俱乐部在线观看| 亚洲一区二区三区四区五区午夜 | 最新高清无码专区| 欧美一区国产二区| 日韩视频免费大全中文字幕| 狼人社综合社区| 国产亚洲欧美另类一区二区三区| 99精品欧美一区| 欧美va亚洲va日韩∨a综合色| 午夜精品电影| 国产精品久久久久久av福利软件 | 一区二区三区欧美激情| 玖玖玖国产精品| 红桃视频亚洲| 久久精品国产久精国产思思| 在线视频欧美日韩精品| 欧美精品福利视频| 亚洲美女在线一区| 亚洲国产欧美不卡在线观看| 欧美a级大片| 在线日韩av| 欧美高清成人| 免费欧美在线视频| 亚洲三级性片| 91久久精品日日躁夜夜躁国产| 欧美肥婆在线| 亚洲视频高清| 亚洲免费一级电影| 国产午夜精品久久久久久免费视 | 欧美一区二区三区在线| 亚洲最黄网站| 国产精品理论片在线观看| 欧美一区二区高清在线观看| 亚洲男同1069视频| 国产一区二区三区久久 | 中日韩午夜理伦电影免费| 欧美日韩视频在线第一区| 亚洲线精品一区二区三区八戒| 亚洲裸体俱乐部裸体舞表演av| 欧美日本二区| 亚洲欧美另类中文字幕| 香蕉成人久久| 亚洲黄色成人网| 亚洲性av在线| 国内精品视频在线播放| 老司机免费视频一区二区| 蜜臀av一级做a爰片久久| 亚洲啪啪91| 一本一道久久综合狠狠老精东影业| 国产精品高清免费在线观看| 久久在线免费| 欧美日韩不卡合集视频| 欧美怡红院视频| 欧美 日韩 国产一区二区在线视频| 一区二区三区福利| 亚洲欧美国产一区二区三区| 久久国产精品亚洲va麻豆| 亚洲精品美女在线观看播放| 99热精品在线| 国自产拍偷拍福利精品免费一| 亚洲黄色成人网| 国产欧美成人| 中日韩美女免费视频网址在线观看| 亚洲一区二区三区精品视频 | 正在播放欧美视频| 性8sex亚洲区入口| 99视频精品在线| 欧美一级在线亚洲天堂| 亚洲精品三级| 久久国产精品一区二区三区四区| 亚洲精品美女在线| 久久激情中文| 亚洲永久视频| 欧美精品在线播放| 久久综合一区| 欧美亚洲成人网| 亚洲国产精品成人综合| 韩国av一区二区三区四区| 亚洲视频二区| 日韩一级免费| 久久午夜精品一区二区| 欧美一区二区三区在线视频 | 亚洲国产精品女人久久久| 亚洲视频axxx| 亚洲午夜激情在线| 欧美激情久久久久久| 蜜桃久久av| 国产日产欧产精品推荐色| 亚洲六月丁香色婷婷综合久久| 一区福利视频| 欧美一级淫片aaaaaaa视频| 亚洲一区二区高清视频| 欧美大片第1页| 欧美国产视频日韩| 亚洲福利视频专区| 老巨人导航500精品| 女人色偷偷aa久久天堂| 激情久久中文字幕| 久久国产精品第一页| 久久国产加勒比精品无码| 国产精品久久久久一区二区三区共| 最新成人av网站| 日韩亚洲精品在线| 欧美日韩成人一区二区| 一本久久a久久免费精品不卡| 久久综合九色九九| 欧美激情在线播放| 亚洲精品一级| 欧美日韩精品免费观看| 99这里只有久久精品视频| 宅男噜噜噜66一区二区| 国产精品国产福利国产秒拍| 亚洲免费视频成人| 久久综合伊人| 99国产一区| 国产精品美女999| 欧美在线观看视频| 免费成人在线观看视频| 亚洲精品一区二区三区在线观看| 欧美女激情福利| 亚洲一区国产| 久久亚洲精品一区二区| 最新69国产成人精品视频免费| 欧美日韩在线不卡| 欧美在线观看视频一区二区三区| 欧美aⅴ一区二区三区视频| 99精品欧美一区二区三区| 国产欧美一区二区精品性| 蜜桃av噜噜一区| 亚洲一区免费网站| 亚洲成人在线视频播放| 99re热精品| 国产日韩欧美自拍| 欧美成人免费一级人片100| 亚洲一区二区不卡免费| 欧美h视频在线| 亚洲欧美综合精品久久成人| 亚洲国产精品成人va在线观看| 欧美日韩一区二区国产| 久久久久九九九| 亚洲精品视频啊美女在线直播| 欧美自拍丝袜亚洲| 一区二区三区欧美在线| 伊人影院久久| 国产伦精品一区二区三| 欧美成人免费在线| 久久人人爽爽爽人久久久| 亚洲天堂偷拍| 亚洲精品久久久久久久久久久久久| 久久se精品一区精品二区| 日韩午夜精品视频| 尤物精品在线| 国产日韩欧美一区在线| 欧美日韩免费| 欧美超级免费视 在线| 欧美一区二区高清| 亚洲午夜免费视频| 99re66热这里只有精品4| 亚洲国产高清自拍| 欧美+日本+国产+在线a∨观看| 久久国产一区二区|