锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产V亚洲V天堂无码久久久 ,亚洲精品无码久久久久久,久久国产香蕉视频http://www.shnenglu.com/csu-yx-2013/category/18792.htmlAlgorithm Study And So Onzh-cnFri, 13 Sep 2013 01:08:24 GMTFri, 13 Sep 2013 01:08:24 GMT60poj 3264 Balanced Lineup St綆楁硶寤虹珛Rmqhttp://www.shnenglu.com/csu-yx-2013/archive/2012/10/25/193854.htmlyxyxThu, 25 Oct 2012 11:29:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/10/25/193854.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/193854.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/10/25/193854.html#Feedback0http://www.shnenglu.com/csu-yx-2013/comments/commentRss/193854.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/193854.html   
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;

const int MAX_I = 50010;
const int MAX_J = 20;

int nMax[MAX_I][MAX_J];
int nMin[MAX_I][MAX_J];
int nArr[MAX_I];
int nN, nQ;

void InitRmq(int nN)
{
    for (int i = 1; i <= nN; ++i)
    {
        nMax[i][0] = nMin[i][0] = nArr[i];
    }
    
    for (int j = 1; (1 << j) <= nN; ++j)
    {
        for (int i = 1; i + (1 << j) - 1 <= nN; ++i)
        {
            nMax[i][j] = max(nMax[i][j - 1],
                             nMax[i + (1 << (j - 1))][j - 1]);
            nMin[i][j] = min(nMin[i][j - 1],
                             nMin[i + (1 << (j - 1))][j - 1]);                
        }
    }
}

int Query(int nA, int nB)
{
    int k = (int)(log(1.0 * nB - nA + 1) / log(2.0));
    int nBig = max(nMax[nA][k], nMax[nB - (1 << k) + 1][k]);
    int nSml = min(nMin[nA][k], nMin[nB - (1 << k) + 1][k]);
    return nBig - nSml;
}

int main()
{
    while (scanf("%d%d", &nN, &nQ) == 2)
    {
        for (int i = 1; i <= nN; ++i)
        {
            scanf("%d", &nArr[i]);
        }
        InitRmq(nN);
        for (int i = 0; i < nQ; ++i)
        {
            int nA, nB;
            scanf("%d%d", &nA, &nB);
            printf("%d\n", Query(nA, nB));
        }
    }
    
    return 0;
}


yx 2012-10-25 19:29 鍙戣〃璇勮
]]>
poj 3764 The xor-longest Path 瀛楀吀鏍?+ Xorhttp://www.shnenglu.com/csu-yx-2013/archive/2012/10/12/193225.htmlyxyxFri, 12 Oct 2012 12:12:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/10/12/193225.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/193225.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/10/12/193225.html#Feedback0http://www.shnenglu.com/csu-yx-2013/comments/commentRss/193225.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/193225.html鎴栬搗鏉?鏈澶с?br />   榪欎釜棰樻湁涓ゆ銆傜涓姝ユ槸鍋囧畾鏍逛負鑺傜偣0錛屾眰鍑烘牴鍒板叾瀹冭妭鐐圭殑寮傛垨璺濈錛屼繚瀛樺湪鏁扮粍xor閲岄潰錛?br />榪欎釜dfs涓涓嬪嵆鍙傜劧鍚庯紝鐢▁or[i]^xor[j]灝辮兘浠h〃鑺傜偣i鍒拌妭鐐筳鐨勮礬寰勩傝繖涓粨璁哄彲浠ヨ繖涔堢湅銆?br />濡傛灉錛宨鍜宩涔嬮棿鐨勮礬寰勭粡榪囨牴鑺傜偣錛岄偅涔堜笂闈㈢殑緇撹鑲畾鏄紜殑銆傚鏋滐紝璇ヨ礬寰勪笉緇忚繃鏍癸紝閭d箞
xor[i]鍜寈or[j]蹇呭畾淇濇姢浠庢牴鍒版煇涓妭鐐圭殑鐩稿悓鐨勪竴孌靛瓙璺緞錛屾牴鎹紓鎴栫殑鎬ц川錛岃繖孌靛瓙璺緞浼?br />琚秷鎺夛紝鎵浠ヨ繖涓粨璁轟篃鏄繖紜殑銆傘傘?br />   絎簩姝ュ氨鏄灇涓撅紝xor[i]^xor[j]浣垮緱緇撴灉鏈澶т簡銆傚鏋滅洿鎺ユ毚鍔涳紝騫蟲柟鐨勭畻娉曡偗瀹氫細瓚呮椂鐨勩?br />鐢變簬姣忎釜鍊煎彲浠ヨ〃紺烘垚2榪涘埗錛屽鏋滄妸鍏跺畠xor鍊奸兘淇濆瓨鍦ㄥ瓧鍏告爲閲岄潰錛岀敤褰撳墠鐨剎or[i]鍘誨瓧鍏告爲
閲岄潰錛屼竴閬嶅氨鍙互鎵懼埌寮傛垨鏈澶у箋?br />   鍙﹀錛岀敱浜庢爲鐨勭偣鏁板お澶氾紝鍙兘鐢ㄩ偦鎺ヨ〃錛岀敤vector妯℃嫙閭繪帴琛ㄦ灉鏂秴鏃朵簡銆傘傘?br />鏀規(guī)垚闈欐侀摼琛ㄦ墠榪囥傘傘?br />
   浠g爜濡備笅錛?br />
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;

const int MAX = 100010;
int nXor[MAX];
bool bVis[MAX];
int nFirst[MAX];
struct Edge
{
    int nE;
    int nW;
    int nNext;
};
Edge egs[MAX * 2];

struct Node
{
    Node* pSons[2];
};
Node nodes[MAX * 32];
Node* pRoot = &nodes[0];
int nNew;

void GetBCode(int nL, int* nBCode, int& nLen)
{
    nLen = 0;
    while (nLen <= 30)
    {
        nBCode[nLen++] = nL % 2;
        nL >>= 1;
    }
    reverse(nBCode, nBCode + nLen);
}

void Insert(int nL)
{
    int nLen = 0;
    int i = 0;
    int nBCode[32];

    GetBCode(nL, nBCode, nLen);
    Node* pNode = pRoot;

    while (i < nLen)
    {
        if (pNode->pSons[nBCode[i]])
        {
            pNode = pNode->pSons[nBCode[i]];
        }
        else
        {
            memset(nodes + nNew, 0, sizeof(nodes[nNew]));
            pNode->pSons[nBCode[i]] = nodes + nNew;
            pNode = nodes + nNew;
            ++nNew;
        }
        ++i;
    }
}

int FindMax(int nL)
{
    int nLen = 0;
    int nAns = 0;
    int i = 0;
    int nBCode[32];
    Node* pNode = pRoot;
    
    GetBCode(nL, nBCode, nLen);
    while (i < nLen)
    {
        int nBest = (nBCode[i] == 0 ? 1 : 0);
        int nBad = (nBCode[i] == 0 ? 0 : 1);
        if (pNode->pSons[nBest])
        {
            nAns = 2 * nAns + nBest;
            pNode = pNode->pSons[nBest];
        }
        else if (pNode->pSons[nBad])
        {
            nAns = 2 * nAns + nBad;
            pNode = pNode->pSons[nBad];
        }
        else break;
        ++i;
    }

    return nAns ^ nL;
}

void Dfs(int nV, int nL)
{
    nXor[nV] = nL;
    bVis[nV] = true;
    for (int e = nFirst[nV]; e != -1; e = egs[e].nNext)
    {
        if (!bVis[egs[e].nE])
        {
            Dfs(egs[e].nE, nL ^ egs[e].nW);
        }
    }
}

int main()
{
    int nN;
    int nU, nV, nW;
    
    while (scanf("%d", &nN) == 1)
    {
        for (int i = 0; i < nN; ++i) nFirst[i] = -1;
        for (int i = 1, j = 0; i < nN; ++i)
        {
            scanf("%d%d%d", &nU, &nV, &nW);
            egs[j].nE = nV;
            egs[j].nW = nW;
            egs[j].nNext = nFirst[nU];
            nFirst[nU] = j++;
            egs[j].nE = nU;
            egs[j].nW = nW;
            egs[j].nNext = nFirst[nV];
            nFirst[nV] = j++;
        }

        memset(bVis, falsesizeof(bool) * nN);
        Dfs(0, 0);

        memset(&nodes[0], 0, sizeof(Node));
        nNew = 1;
        int nAns = 0;
        
        for (int i = 0; i < nN; ++i)
        {
            nAns = max(nAns, FindMax(nXor[i]));
            Insert(nXor[i]);
        }
        printf("%d\n", nAns);
    }

    return 0;
}


yx 2012-10-12 20:12 鍙戣〃璇勮
]]>
poj 1182 椋熺墿閾?騫舵煡闆?/title><link>http://www.shnenglu.com/csu-yx-2013/archive/2012/10/10/193135.html</link><dc:creator>yx</dc:creator><author>yx</author><pubDate>Wed, 10 Oct 2012 12:51:00 GMT</pubDate><guid>http://www.shnenglu.com/csu-yx-2013/archive/2012/10/10/193135.html</guid><wfw:comment>http://www.shnenglu.com/csu-yx-2013/comments/193135.html</wfw:comment><comments>http://www.shnenglu.com/csu-yx-2013/archive/2012/10/10/193135.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/csu-yx-2013/comments/commentRss/193135.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/csu-yx-2013/services/trackbacks/193135.html</trackback:ping><description><![CDATA[   榪欐槸騫舵煡闆嗘渶鍚庝竴棰橈紝鎹涔熸槸鏈緇忓吀鐨勪竴棰樸傜粡甯稿墠闈㈠嚑棰樼殑璁粌錛岃繖棰樼殑鎬濊礬寰堝揩<br />灝辮兘鎯沖嚭鏉ヤ簡銆傚彧闇瑕佸姣忎釜鑺傜偣闄勫姞涓涓俊鎭〃紺虹鏍硅妭鐐圭殑璺濈錛屽茍涓旇窛紱繪槸妯?寰幆鐨勩?br />   娉ㄦ剰鍚堝茍鏃跺欎繚鎸佽窛紱誨彉鍖栫殑姝g‘鎬с傝屼笖鍚堝茍鏈?縐嶆儏鍐碉紝璺濈鐩稿悓鍚堝茍鍜岃窛紱諱笉鍚屽悎騫躲?br />鍒嗗埆瀵瑰簲浜庨鐩弿榪頒腑鐨?鍜?鎿嶄綔銆?br />   鍏抽敭榪樻槸FindSet閲岄潰瀵硅窛紱籲Dis鏁扮粍閲岄潰鐨勪慨鏀癸紝鍓嶉潰涓鐩村啓閿欒繖涓紝wa浜嗗ソ鍑犳錛岃繕鏄?br />鐪嬮槦鍙嬩唬鐮佹墠涓鐪煎彂鐜版垜鍙堟妸榪欓噷鍐欓敊浜嗐傘傘傚綋鍓嶈窛紱葷殑鏇存柊榪樻槸絳変簬褰撳墠璺濈鍔犱笂鍓嶄竴涓?br />鑺傜偣鐨勮窛紱誨啀妯?錛岀被浼間簬鍓嶉潰鍑犻鐨勬洿鏂版柟娉曘?br />   榪欑灝嗘湁鍏崇郴鐨勮妭鐐規(guī)斁鍦ㄤ竴涓茍鏌ラ泦閲岄潰錛屽啀緇欐瘡涓妭鐐歸檮鍔犲叾瀹冧俊鎭弿榪板叾瀹冨叧緋葷殑鍋氭硶錛?br />紜疄姣旇緝鏈夋晥銆傘傘傚茍鏌ラ泦鏄簲鐢ㄤ簬涓嶇浉浜ら泦鍚堢殑鏁版嵁緇撴瀯錛岀湅鏉ユ煇涓椂鍊欏嵈鏈夊鐢ㄥ晩銆傘傘?br /><br />   浠g爜濡備笅錛?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include <stdio.h><br />#include <<span style="color: #0000FF; ">string</span>.h><br />#include <algorithm><br /><span style="color: #0000FF; ">using</span> <span style="color: #0000FF; ">namespace</span> std;<br /><br /><span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">int</span> MAX = 50010;<br /><span style="color: #0000FF; ">int</span> nN, nK;<br /><span style="color: #0000FF; ">int</span> nSets[MAX];<br /><span style="color: #0000FF; ">int</span> nDis[MAX];<br /><br /><span style="color: #0000FF; ">void</span> MakeSets(<span style="color: #0000FF; ">int</span> nN)<br />{<br />    <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">int</span> i = 1; i <= nN; ++i)<br />    {<br />        nSets[i] = i;<br />        nDis[i] = 0;<br />    }<br />}<br /><br /><span style="color: #0000FF; ">int</span> FindSet(<span style="color: #0000FF; ">int</span> nI)<br />{<br />    <span style="color: #0000FF; ">if</span> (nSets[nI] != nI)<br />    {<br />        <span style="color: #0000FF; ">int</span> nPre = nSets[nI];<br />        nSets[nI] = FindSet(nSets[nI]);<br />        nDis[nI] = (nDis[nPre] + nDis[nI]) % 3;<br />    }<br />    <span style="color: #0000FF; ">return</span> nSets[nI];<br />}<br /><br /><span style="color: #0000FF; ">int</span> main()<br />{<br />    <span style="color: #0000FF; ">int</span> nAns = 0;<br />    <span style="color: #0000FF; ">int</span> nOper, nX, nY;<br />    <br />    scanf("%d%d", &nN, &nK);<br />    MakeSets(nN);<br />    <span style="color: #0000FF; ">while</span> (nK--)<br />    {<br />        scanf("%d%d%d", &nOper, &nX, &nY);<br />        <span style="color: #0000FF; ">if</span> (nX > nN || nY > nN || nOper == 2 && nX == nY)<br />        {<br />            ++nAns;<br />        }<br />        <span style="color: #0000FF; ">else</span><br />        {<br />            <span style="color: #0000FF; ">if</span> (nOper == 1)<br />            {<br />                <span style="color: #0000FF; ">int</span> nA = FindSet(nX);<br />                <span style="color: #0000FF; ">int</span> nB = FindSet(nY);<br />                <span style="color: #0000FF; ">if</span> (nA == nB)<br />                {<br />                    <span style="color: #0000FF; ">if</span> (nDis[nX] != nDis[nY])<br />                    {<br />                        ++nAns;<br />                    }<br />                }<br />                <span style="color: #0000FF; ">else</span><br />                {<br />                    nSets[nB] = nA;<br />                    nDis[nB] = (nDis[nX] - nDis[nY] + 3) % 3;<br />                }<br />            }<br />            <span style="color: #0000FF; ">else</span><br />            {<br />                <span style="color: #0000FF; ">int</span> nA = FindSet(nX);<br />                <span style="color: #0000FF; ">int</span> nB = FindSet(nY);<br />                <span style="color: #0000FF; ">if</span> (nA == nB)<br />                {<br />                    <span style="color: #0000FF; ">if</span> ((nDis[nX] + 1) % 3 != nDis[nY])<br />                    {<br />                        ++nAns;<br />                    }<br />                }<br />                <span style="color: #0000FF; ">else</span><br />                {<br />                    nSets[nB] = nA;<br />                    nDis[nB] = (nDis[nX] + 1 - nDis[nY] + 3) % 3;<br />                }<br />            }<br />        }<br />    }<br />    printf("%d\n", nAns);<br /><br />    <span style="color: #0000FF; ">return</span> 0;<br />}</div><br />   <img src ="http://www.shnenglu.com/csu-yx-2013/aggbug/193135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/csu-yx-2013/" target="_blank">yx</a> 2012-10-10 20:51 <a href="http://www.shnenglu.com/csu-yx-2013/archive/2012/10/10/193135.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>poj 1988 Cube Stacking 騫舵煡闆?/title><link>http://www.shnenglu.com/csu-yx-2013/archive/2012/10/10/193107.html</link><dc:creator>yx</dc:creator><author>yx</author><pubDate>Wed, 10 Oct 2012 04:15:00 GMT</pubDate><guid>http://www.shnenglu.com/csu-yx-2013/archive/2012/10/10/193107.html</guid><wfw:comment>http://www.shnenglu.com/csu-yx-2013/comments/193107.html</wfw:comment><comments>http://www.shnenglu.com/csu-yx-2013/archive/2012/10/10/193107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/csu-yx-2013/comments/commentRss/193107.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/csu-yx-2013/services/trackbacks/193107.html</trackback:ping><description><![CDATA[   涔熸槸涓鎰忔瘮杈冨钁╃殑棰樼洰銆傛湁2涓搷浣滐紝1涓槸鎶婁竴涓厓绱犳墍鍦ㄧ殑鏍堬紝鏀懼埌鍙﹀1涓厓绱犳墍鍦?br />鐨勬爤涓婇潰銆傚彟澶栦竴涓搷浣滄槸緇熻鏌愪釜鍏冪礌涓嬮潰鏈夊灝戜釜鍏冪礌(褰撶劧鏄湪鍚屼竴涓爤涓級銆?br />   璨屼技錛岄渶瑕佽褰曟瘡涓厓绱犱笅闈㈢殑鍏冪礌鏄粈涔堜簡錛屾棦鐒惰璁板綍榪欎釜灝變笉鑳界敤騫舵煡闆嗙殑璺緞鍘嬬緝浜嗐?br /> 涓嶅帇緙╄礬寰勭殑璇濓紝鑲畾浼氳秴鏃剁殑銆傛庝箞鍔炰簡銆傘傘?br />   鍏跺疄錛屽彲浠ヨ繖涔堣冭檻錛屼互姣忎釜鏍堢殑鏍堝簳鍏冪礌浣滀負騫舵煡闆嗙殑浠h〃鍏冪礌銆傚帇緙╄礬寰勫悗錛屾瘡涓厓绱犳垨鑰?br />鏄牴鍏冪礌鎴栬呭叾鐖朵翰鍏冪礌灝辨槸鏍瑰厓绱犮傛墍浠ワ紝鍙﹀瀵規(guī)瘡涓妭鐐歸檮鍔犱釜淇℃伅浠h〃璇ヨ妭鐐圭殑楂樺害錛屾爤搴?br />鍏冪礌楂樺害涓?銆傚啀闄勫姞涓俊鎭唬琛ㄦ瘡涓茍鏌ラ泦鍏冪礌鎬繪暟鐩紝榪欐牱灝卞彲浠ュ湪鍚堝茍闆嗗悎鏃跺欎慨鏀逛俊鎭紝<br />騫朵笖鍘嬬緝璺緞涔熻兘淇濊瘉絳旀姝g‘銆傘傘?br /><br />   浠g爜濡備笅錛?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include <stdio.h><br />#include <stdlib.h><br />#include <<span style="color: #0000FF; ">string</span>.h><br />#include <algorithm><br /><span style="color: #0000FF; ">using</span> <span style="color: #0000FF; ">namespace</span> std;<br /><br /><span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">int</span> MAX = 30010;<br /><span style="color: #0000FF; ">int</span> nSets[MAX];<br /><span style="color: #0000FF; ">int</span> nNum[MAX];<br /><span style="color: #0000FF; ">int</span> nRank[MAX];<br /><br /><span style="color: #0000FF; ">void</span> MakeSets(<span style="color: #0000FF; ">int</span> nN)<br />{<br />    <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">int</span> i = 0; i < nN; ++i)<br />    {<br />        nSets[i] = i;<br />        nNum[i] = 1;<br />        nRank[i] = 0;<br />    }<br />}<br /><br /><span style="color: #0000FF; ">int</span> FindSet(<span style="color: #0000FF; ">int</span> nI)<br />{<br />    <span style="color: #0000FF; ">if</span> (nSets[nI] != nI)<br />    {<br />        <span style="color: #0000FF; ">int</span> nPre = nSets[nI];<br />        nSets[nI] = FindSet(nSets[nI]);<br />        nRank[nI] += nRank[nPre];<br />    }<br />    <br />    <span style="color: #0000FF; ">return</span> nSets[nI];<br />}<br /><br /><span style="color: #0000FF; ">void</span> Move(<span style="color: #0000FF; ">int</span> nX, <span style="color: #0000FF; ">int</span> nY)<br />{<br />    <span style="color: #0000FF; ">int</span> nA = FindSet(nX);<br />    <span style="color: #0000FF; ">int</span> nB = FindSet(nY);<br />    <span style="color: #008000; ">//</span><span style="color: #008000; ">printf("nA:%d,nB:%d\n", nA, nB);</span><span style="color: #008000; "><br /></span>    <span style="color: #0000FF; ">if</span> (nA != nB)<br />    {<br />        nSets[nA] = nB;<br />        nRank[nA] += nNum[nB];<br />        nNum[nB] += nNum[nA];<br />    }<br />}<br /><br /><span style="color: #0000FF; ">int</span> main()<br />{<br />    <span style="color: #0000FF; ">int</span> nP;<br />    <span style="color: #0000FF; ">char</span> szOper[10];<br />    <span style="color: #0000FF; ">int</span> nX, nY;<br /><br />    scanf("%d", &nP);<br />    MakeSets(MAX);<br />    <span style="color: #0000FF; ">while</span> (nP--)<br />    {<br />        scanf("%s", szOper);<br />        <span style="color: #0000FF; ">if</span> (szOper[0] == 'M')<br />        {<br />            scanf("%d%d", &nX, &nY);<br />            Move(nX, nY);<br />        }<br />        <span style="color: #0000FF; ">else</span><br />        {<br />            scanf("%d", &nX);<br />            FindSet(nX);<br />            printf("%d\n", nRank[nX]);<br />        }<br />    }<br /><br />    <span style="color: #0000FF; ">return</span> 0;<br />}</div><img src ="http://www.shnenglu.com/csu-yx-2013/aggbug/193107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/csu-yx-2013/" target="_blank">yx</a> 2012-10-10 12:15 <a href="http://www.shnenglu.com/csu-yx-2013/archive/2012/10/10/193107.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>poj 1984 Navigation Nightmare 騫舵煡闆?/title><link>http://www.shnenglu.com/csu-yx-2013/archive/2012/10/09/193077.html</link><dc:creator>yx</dc:creator><author>yx</author><pubDate>Tue, 09 Oct 2012 13:25:00 GMT</pubDate><guid>http://www.shnenglu.com/csu-yx-2013/archive/2012/10/09/193077.html</guid><wfw:comment>http://www.shnenglu.com/csu-yx-2013/comments/193077.html</wfw:comment><comments>http://www.shnenglu.com/csu-yx-2013/archive/2012/10/09/193077.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/csu-yx-2013/comments/commentRss/193077.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/csu-yx-2013/services/trackbacks/193077.html</trackback:ping><description><![CDATA[   騫舵煡闆嗗簲鐢ㄧ殑鍙樺艦銆傞鐩剰鎬濇槸涓涓浘涓紝鍙湁涓婁笅宸﹀彸鍥涗釜鏂瑰悜鐨勮竟銆傜粰鍑鴻繖鏍風殑涓浜涜竟錛?br />姹備換鎰忔寚瀹氱殑2涓妭鐐逛箣闂寸殑璺濈銆?br />   鏈夊彲鑳藉綋鍓嶇粰鍑虹殑淇℃伅錛屾病鏈夋秹鍙婂埌瑕佹眰鐨?涓妭鐐癸紝鎴栬呭彧娑夊強鍒頒簡1涓妭鐐癸紝閭d箞鑲畾<br />鏃犳硶紜畾瀹冧滑鐨勮窛紱匯傛垨鑰呮牴鎹凡緇忕粰鍑虹殑杈瑰彧鐭ラ亾榪?涓妭鐐瑰湪涓嶅悓鐨勮仈閫氬垎閲忛噷闈紝閭d箞鍏?br />璺濈涔熸槸鏃犳硶紜畾鐨勶紝鏍規(guī)嵁棰樼洰瑕佹眰錛岃緭鍑?1銆?br />   闂鏄鏋滆兘澶熺‘瀹氬畠浠湪涓涓仈閫氬垎閲忛噷闈紝濡備綍紜畾瀹冧滑鐨勮窛紱諱簡銆?br />   榪欎釜棰樼殑鍏抽敭鍦ㄤ簬錛屽彧鏈変笂涓嬪乏鍙沖洓涓柟鍚戠殑杈癸紝鍋囪姣忎釜鑺傜偣閮芥湁涓涓潗鏍囩殑璇濓紝閭d箞瀹冧滑<br />鐩稿浜庝唬琛ㄨ鑱旈氬垎閲忚妭鐐圭殑鍧愭爣鑲畾鏄浐瀹氱殑錛岄偅涔堝氨涓嶉渶瑕佽冭檻鍥鵑噷闈㈡湁鐜箣綾葷殑鎯呭喌浜嗐?br />榪欐牱灝卞彲浠ュ緢鏂逛究鐨勫簲鐢ㄥ茍鏌ラ泦鏉ヨВ浜嗐?br />   鍒╃敤騫舵煡闆嗭紝緇欐瘡涓妭鐐歸檮鍔犲叾瀹冧俊鎭紝鍗崇浉瀵逛簬浠h〃璇ュ茍鏌ラ泦鐨勮妭鐐圭殑鍧愭爣錛坸錛寉錛夈?br />鍦‵indSet閲岄潰姹傚嚭鍧愭爣錛屽湪UnionSet閲岄潰淇敼鍚堝茍鍚庢柊鍔犲叆鐨勫彟澶栦竴涓泦鍚堢殑鏍硅妭鐐圭殑鍧愭爣鍗沖彲銆?br />   浠g爜濡備笅錛?br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all">#include <stdio.h> <br />#include <<span style="color: #0000FF; ">string</span>.h><br />#include <stdlib.h><br />#include <algorithm><br /><span style="color: #0000FF; ">using</span> <span style="color: #0000FF; ">namespace</span> std;<br /><br /><span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">int</span> MAX_N = 40010;<br /><span style="color: #0000FF; ">int</span> nN, nM;<br /><span style="color: #0000FF; ">int</span> nSets[MAX_N];<br /><span style="color: #0000FF; ">int</span> nX[MAX_N];<br /><span style="color: #0000FF; ">int</span> nY[MAX_N];<br /><span style="color: #0000FF; ">char</span> szInput[MAX_N][100];<br /><br /><span style="color: #0000FF; ">void</span> MakeSets(<span style="color: #0000FF; ">int</span> nNum)<br />{<br />    <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">int</span> i = 0; i < nNum; ++i)<br />    {<br />        nSets[i] = i;<br />        nX[i] = nY[i] = 0;<br />    }<br />}<br /><br /><span style="color: #0000FF; ">int</span> FindSets(<span style="color: #0000FF; ">int</span> nI)<br />{<br />    <span style="color: #0000FF; ">if</span> (nSets[nI] != nI)<br />    {<br />        <span style="color: #0000FF; ">int</span> nPre = nSets[nI];<br />        nSets[nI] = FindSets(nSets[nI]);<br />        nX[nI] += nX[nPre];<br />        nY[nI] += nY[nPre];<br />    }<br />    <span style="color: #0000FF; ">return</span> nSets[nI];<br />}<br /><br /><span style="color: #0000FF; ">void</span> UnionSets(<span style="color: #0000FF; ">int</span> nBeg, <span style="color: #0000FF; ">int</span> nEnd, <span style="color: #0000FF; ">int</span> dx, <span style="color: #0000FF; ">int</span> dy)<br />{<br />    <span style="color: #0000FF; ">int</span> nA = FindSets(nBeg);<br />    <span style="color: #0000FF; ">int</span> nB = FindSets(nEnd);<br />    <span style="color: #0000FF; ">if</span> (nA != nB)<br />    {<br />        nSets[nB] = nA;<span style="color: #008000; ">//</span><span style="color: #008000; ">鎶婇泦鍚圔鍚堝茍鍒伴泦鍚圓涓?/span><span style="color: #008000; "><br /></span>        nX[nB] = nX[nBeg] + dx - nX[nEnd];<span style="color: #008000; ">//</span><span style="color: #008000; ">鍥犱負鏂瑰悜閫嗚繃鏉ヤ簡,鎵浠ユ槸鍑忓幓</span><span style="color: #008000; "><br /></span>        nY[nB] = nY[nBeg] + dy - nY[nEnd];<br />    }<br />}<br /><br /><span style="color: #0000FF; ">int</span> main()<br />{<br />    <span style="color: #0000FF; ">int</span> nBeg, nEnd, nL;<br />    <span style="color: #0000FF; ">char</span> szDir[10];<br /><br />    <span style="color: #0000FF; ">while</span> (scanf("%d%d%*c", &nN, &nM) == 2)<br />    {<br />        MakeSets(nN);<br />        <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">int</span> i = 0; i < nM; ++i)<br />        {<br />            fgets(szInput[i], 100, stdin);<br />        }<br />        <span style="color: #0000FF; ">int</span> nK;<br />        <span style="color: #0000FF; ">int</span> nF1, nF2, nI;<br />        scanf("%d", &nK);<br />        <span style="color: #0000FF; ">int</span> nCur = 0;<br />        <span style="color: #0000FF; ">while</span> (nK--)<br />        {<br />            scanf("%d%d%d", &nF1, &nF2, &nI);<br />            <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">int</span> i = nCur; i < nI; ++i)<br />            {<br />                sscanf(szInput[i], "%d%d%d%s", &nBeg,<br />                       &nEnd, &nL, szDir);<br />                <span style="color: #0000FF; ">int</span> dx = 0, dy = 0;<br />                <span style="color: #0000FF; ">switch</span> (szDir[0])<br />                {<br />                    <span style="color: #0000FF; ">case</span> 'N': dy += nL; <span style="color: #0000FF; ">break</span>;<br />                    <span style="color: #0000FF; ">case</span> 'S': dy -= nL; <span style="color: #0000FF; ">break</span>;<br />                    <span style="color: #0000FF; ">case</span> 'E': dx += nL; <span style="color: #0000FF; ">break</span>;<br />                    <span style="color: #0000FF; ">case</span> 'W': dx -= nL; <span style="color: #0000FF; ">break</span>;<br />                }<br />                UnionSets(nBeg, nEnd, dx, dy);<br />            }<br />            nCur = nI;<br />            <br />            <span style="color: #0000FF; ">if</span> (FindSets(nF1) != FindSets(nF2))<br />            {<br />                printf("-1\n");<br />            }<br />            <span style="color: #0000FF; ">else</span><br />            {<br />                printf("%d\n", abs(nX[nF1] - nX[nF2])<br />                        + abs(nY[nF1] - nY[nF2]));<br />            }<br />        }<br />    }<br /><br />    <span style="color: #0000FF; ">return</span> 0;<br />}</div><img src ="http://www.shnenglu.com/csu-yx-2013/aggbug/193077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/csu-yx-2013/" target="_blank">yx</a> 2012-10-09 21:25 <a href="http://www.shnenglu.com/csu-yx-2013/archive/2012/10/09/193077.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>poj 1703 Find them, Catch them 騫舵煡闆?/title><link>http://www.shnenglu.com/csu-yx-2013/archive/2012/10/08/193028.html</link><dc:creator>yx</dc:creator><author>yx</author><pubDate>Mon, 08 Oct 2012 14:33:00 GMT</pubDate><guid>http://www.shnenglu.com/csu-yx-2013/archive/2012/10/08/193028.html</guid><wfw:comment>http://www.shnenglu.com/csu-yx-2013/comments/193028.html</wfw:comment><comments>http://www.shnenglu.com/csu-yx-2013/archive/2012/10/08/193028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/csu-yx-2013/comments/commentRss/193028.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/csu-yx-2013/services/trackbacks/193028.html</trackback:ping><description><![CDATA[   騫舵煡闆嗗簲鐢ㄧ殑鍙樺艦銆?br />   緇欏嚭鐨勬槸2涓妭鐐規(guī)槸鏁屽鍏崇郴鐨勪俊鎭紝鏈鍚庤闂換鎰?涓妭鐐圭殑鍏崇郴銆傛牴鎹繖浜涗俊鎭紝<br />鑺傜偣涔嬮棿鍙兘鏄晫瀵圭殑錛屼篃鍙兘涓嶆槸鐨勶紙鍥犱負鏁屼漢鐨勬晫浜哄氨鏄湅鍙嬶級錛屼篃鍙兘緇欏嚭鐨?br />淇℃伅鏍規(guī)湰鎻忚堪涓嶄簡瀹冧滑鐨勫叧緋匯?br />   鐪嬭搗鏉ヨ窡鍘熷鐨勫茍鏌ラ泦搴旂敤宸繙浜嗐傘傘?br />   鏈変釜姣旇緝鐩存帴鐨勫仛娉曪紝閭d箞灝辨槸鎶婁笉鍦ㄤ竴涓泦鍚堢殑鑺傜偣鐩存帴鐢ㄥ茍鏌ラ泦鍚堝茍鍦ㄤ竴璧楓傝繖鏍風殑璇濓紝<br />濡傛灉璇㈤棶鐨?涓妭鐐瑰湪鍚屼竴涓茍鏌ラ泦閲岄潰錛岄偅涔堝畠浠箣闂寸殑鍏崇郴鏄‘瀹氱殑錛屽惁鍒欐棤娉曠‘瀹氬畠浠殑<br />鍏崇郴銆?br />   鐜板湪榪樻湁涓涓棶棰樻槸錛屽湪鍚屼竴涓茍鏌ラ泦閲岄潰鐨?涓妭鐐規(guī)槸鏁屽鍏崇郴榪樻槸鏈嬪弸鍏崇郴銆傘傘?br />   鍙互緇欐瘡涓妭鐐瑰彟澶栭檮鍔犱釜淇℃伅錛岃褰曞叾璺濈騫舵煡闆嗘牴鑺傜偣鐨勮窛紱匯傚鏋滐紝璇㈤棶鐨?涓妭鐐硅窛紱?br />鍏舵牴鑺傜偣鐨勮窛紱婚兘鏄鏁版垨鑰呴兘鏄伓鏁幫紝閭d箞榪?涓妭鐐規(guī)槸鏈嬪弸鍏崇郴錛屽惁鍒欐槸鏁屽鍏崇郴銆傘傘?br /><br />   浠g爜濡備笅錛?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include <stdio.h><br />#include <<span style="color: #0000FF; ">string</span>.h><br />#include <algorithm><br /><span style="color: #0000FF; ">using</span> <span style="color: #0000FF; ">namespace</span> std;<br /><br /><span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">int</span> MAX_N = 100010;<br /><span style="color: #0000FF; ">int</span> nSets[MAX_N];<br /><span style="color: #0000FF; ">int</span> nDis[MAX_N];<br /><br /><span style="color: #0000FF; ">int</span> nN, nM;<br /><br /><span style="color: #0000FF; ">void</span> MakeSets(<span style="color: #0000FF; ">int</span> nNum)<br />{<br />    <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">int</span> i = 0; i < nNum; ++i)<br />    {<br />        nSets[i] = i;<br />        nDis[i] = 0;<br />    }<br />}<br /><br /><span style="color: #0000FF; ">int</span> FindSet(<span style="color: #0000FF; ">int</span> nI)<br />{<br />    <span style="color: #0000FF; ">if</span> (nSets[nI] != nI)<br />    {<br />        <span style="color: #0000FF; ">int</span> nPre = nSets[nI];<br />        nSets[nI] = FindSet(nSets[nI]);<br />        nDis[nI] = (nDis[nI] + nDis[nPre]) % 2;<br />    }<br />    <span style="color: #0000FF; ">return</span> nSets[nI];<br />}<br /><br /><span style="color: #0000FF; ">void</span> UnionSet(<span style="color: #0000FF; ">int</span> nI, <span style="color: #0000FF; ">int</span> nJ)<br />{<br />    <span style="color: #0000FF; ">int</span> nA = FindSet(nI);<br />    <span style="color: #0000FF; ">int</span> nB = FindSet(nJ);<br />    <span style="color: #0000FF; ">if</span> (nA != nB)<br />    {<br />        nSets[nA] = nB;<br />        nDis[nA] = (nDis[nI] + nDis[nJ] + 1) % 2;<br />    }<br />}<br /><br /><span style="color: #0000FF; ">int</span> main()<br />{<br />    <span style="color: #0000FF; ">int</span> nT;<br />    <br />    scanf("%d", &nT);<br />    <span style="color: #0000FF; ">while</span> (nT--)<br />    {<br />        scanf("%d%d", &nN, &nM);<br />        MakeSets(nN);<br />        <span style="color: #0000FF; ">char</span> szOper[10];<br />        <span style="color: #0000FF; ">int</span> nA, nB;<br />        <span style="color: #0000FF; ">while</span> (nM--)<br />        {<br />            scanf("%s%d%d", szOper, &nA, &nB);<br />            <span style="color: #0000FF; ">if</span> (szOper[0] == 'D')<br />            {<br />                UnionSet(nA, nB);<br />            }<br />            <span style="color: #0000FF; ">else</span><br />            {<br />                <span style="color: #0000FF; ">int</span> nX = FindSet(nA);<br />                <span style="color: #0000FF; ">int</span> nY = FindSet(nB);<br />                <span style="color: #0000FF; ">if</span> (nX == nY)<br />                {<br />                    <span style="color: #0000FF; ">if</span> (nDis[nA] == nDis[nB])<br />                    {<br />                        printf("In the same gang.\n");<br />                    }<br />                    <span style="color: #0000FF; ">else</span><br />                    {<br />                        printf("In different gangs.\n");<br />                    }<br />                }<br />                <span style="color: #0000FF; ">else</span><br />                {<br />                    printf("Not sure yet.\n");<br />                }<br />            }<br />        }<br />    }<br />    <br />    <span style="color: #0000FF; ">return</span> 0;<br />}</div><img src ="http://www.shnenglu.com/csu-yx-2013/aggbug/193028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/csu-yx-2013/" target="_blank">yx</a> 2012-10-08 22:33 <a href="http://www.shnenglu.com/csu-yx-2013/archive/2012/10/08/193028.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>poj 3468 A Simple Problem with Integers 綰挎鏍戞垚孌靛歡榪熸洿鏂?/title><link>http://www.shnenglu.com/csu-yx-2013/archive/2012/09/16/190908.html</link><dc:creator>yx</dc:creator><author>yx</author><pubDate>Sun, 16 Sep 2012 12:42:00 GMT</pubDate><guid>http://www.shnenglu.com/csu-yx-2013/archive/2012/09/16/190908.html</guid><wfw:comment>http://www.shnenglu.com/csu-yx-2013/comments/190908.html</wfw:comment><comments>http://www.shnenglu.com/csu-yx-2013/archive/2012/09/16/190908.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/csu-yx-2013/comments/commentRss/190908.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/csu-yx-2013/services/trackbacks/190908.html</trackback:ping><description><![CDATA[   鐢ㄧ嚎孌墊爲鎴愭鏇存柊涓嶈兘绔嬪嵆鍏ㄩ儴鏇存柊錛屽繀欏繪悶寤惰繜鎿嶄綔銆傚叾瀹烇紝灝辨槸閽堝姣忎釜鑺傜偣錛屽彟澶栨悶涓涓煙琛ㄧず寤惰繜<br />鏇存柊鐨勬暟鐩傜劧鍚庯紝鍦ㄦ洿鏂版搷浣滃拰鏌ユ壘鎿嶄綔鐨勬椂鍊欓兘鎶婄埗浜茶妭鐐圭殑寤惰繜鍩熷線2涓効瀛愯蛋銆?br />   榪欎釜棰樻槸瑕佹垚孌靛鍔犲鹼紝鎵浠ュ湪鍐橮ushDown鍑芥暟鐨勬椂鍊欒娉ㄦ剰錛屽彧鑳界粰鍎垮瓙鑺傜偣鍔犱笂鐖朵翰鑺傜偣鍘嬭繃鏉ョ殑鍊?br />涔樹互鍎垮瓙鍖洪棿鐨勯暱搴︺傝繖棰樿矊浼肩敤鏍戠姸鏁扮粍涔熷彲浠ュ仛錛屼笉榪囪В娉曡偗瀹氭剰鎬濅笉鏄偅涔堢洿鐧界殑銆備笉榪囬熷害鑲畾浼氬揩銆?br />鏍戠姸鏁扮粍瑙f硶錛?a >http://kenby.iteye.com/blog/962159</a><br />   綰挎鏍戠綉涓婃祦琛岀殑瑙f硶閮芥槸寮鏈澶氳妭鐐規(guī)暟鐩?鍊嶇殑鏁扮粍銆備互浣嶇疆1浣滀負鏍癸紝姣忎釜浣嶇疆鍏跺疄浠h〃鐨勬槸涓涓尯闂淬?br />鏌愪漢浣嶇疆1浠h〃1-N鎴栬?-(N-1)鍖洪棿錛屽叿浣撶湅棰樼洰浜嗐傞偅涔?灝變唬琛ㄥ尯闂?-(1+N)/2錛?灝變唬琛ㄥ尯闂?1+N)/2+1 - N浜嗐?br />   鑷充簬lazy鏍囪榪樻槸鎼炰釜澶ф暟緇勶紝鎰忎箟鍜岀嚎孌墊爲鏁扮粍涓鏍鳳紝鎼炴竻妤氫箣鍚庡啓璧鋒潵閮芥瘮杈冪畝鍗曪紝鏈閲嶈鐨勬槸鍙樺艦鏉?br />瑙e喅涓浜涜姹傚鎬殑棰樼洰銆?br /><br />   <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><div>#include <stdio.h></div>#include <<span style="color: #0000FF; ">string</span>.h><br />#include <algorithm><br /><span style="color: #0000FF; ">using</span> <span style="color: #0000FF; ">namespace</span> std;<br />typedef <span style="color: #0000FF; ">long</span> <span style="color: #0000FF; ">long</span> INT;<br /><br /><span style="color: #0000FF; ">const</span> INT MAX_N = 100010;<br /><span style="color: #0000FF; ">const</span> INT INF = 0x7ffffffffffffffLL;<br />INT nTree[MAX_N << 2];<br />INT nAdd[MAX_N << 2];<br />INT nN, nQ;<br /><br /><span style="color: #0000FF; ">void</span> PushUp(INT nRt)<br />{<br />    nTree[nRt] = nTree[nRt << 1] + nTree[nRt << 1 | 1];<br />}<br /><br /><span style="color: #0000FF; ">void</span> BuildTree(INT nL, INT nR, INT nRt)<br />{<br />    nAdd[nRt] = 0;<br />    <span style="color: #0000FF; ">if</span> (nL == nR)<br />    {<br />        scanf("%I64d", &nTree[nRt]);<br />        <span style="color: #0000FF; ">return</span>;<br />    }<br />    <br />    INT nMid = (nL + nR) >> 1;<br />    BuildTree(nL, nMid, nRt << 1);<br />    BuildTree(nMid + 1, nR, nRt << 1 | 1);<br />    PushUp(nRt);<br />}<br /><br /><span style="color: #0000FF; ">void</span> PushDown(INT nL, INT nR, INT nRt)<br />{<br />    INT nMid = (nL + nR) >> 1;<br />    INT nLs = nRt << 1;<br />    INT nRs = nLs | 1;<br />    <br />    <span style="color: #0000FF; ">if</span> (nAdd[nRt])<br />    {<br />        nAdd[nLs] += nAdd[nRt];<br />        nAdd[nRs] += nAdd[nRt];<br />        nTree[nLs] += (nMid - nL + 1) * nAdd[nRt];<br />        nTree[nRs] += (nR - nMid) * nAdd[nRt];<br />        nAdd[nRt] = 0;<br />    }<br />}<br /><br /><span style="color: #0000FF; ">void</span> Update(INT nL, INT nR, INT nRt, INT nX, INT nY, INT nV)<br />{<br />    <span style="color: #0000FF; ">if</span> (nL >= nX && nR <= nY)<br />    {<br />        nTree[nRt] += nV * (nR - nL + 1);<br />        nAdd[nRt] += nV;<br />        <span style="color: #0000FF; ">return</span>;<br />    }<br />    <br />    PushDown(nL, nR, nRt);<br />    INT nMid = (nL + nR) >> 1;<br />    <span style="color: #0000FF; ">if</span> (nX <= nMid) Update(nL, nMid, nRt << 1, nX, nY, nV);<br />    <span style="color: #0000FF; ">if</span> (nY > nMid) Update(nMid + 1, nR, nRt << 1 | 1, nX, nY, nV);<br />    PushUp(nRt);<br />}<br /><br />INT Query(INT nL, INT nR, INT nRt, INT nX, INT nY)<br />{<br />    <span style="color: #0000FF; ">if</span> (nL >= nX && nR <= nY)<br />    {<br />        <span style="color: #0000FF; ">return</span> nTree[nRt];<br />    }<br />    PushDown(nL, nR, nRt);<br />    INT nAns = 0;<br />    INT nMid = (nL + nR) >> 1;<br />    <span style="color: #0000FF; ">if</span> (nX <= nMid) nAns += Query(nL, nMid, nRt << 1, nX, nY);<br />    <span style="color: #0000FF; ">if</span> (nY > nMid) nAns += Query(nMid + 1, nR, nRt << 1 | 1, nX, nY);<br />    <span style="color: #0000FF; ">return</span> nAns;<br />}<br /><br /><span style="color: #0000FF; ">int</span> main()<br />{<br />    INT nTemp;<br />    <span style="color: #0000FF; ">while</span> (scanf("%I64d%I64d", &nN, &nQ) == 2)<br />    {<br />        BuildTree(1, nN, 1);<br />        <br />        <span style="color: #0000FF; ">while</span> (nQ--)<br />        {<br />            <span style="color: #0000FF; ">char</span> szCmd[10];<br />            INT nX, nY, nV;<br />            scanf("%s", szCmd);<br />            <span style="color: #0000FF; ">if</span> (szCmd[0] == 'Q')<br />            {<br />                scanf("%I64d%I64d", &nX, &nY);<br />                printf("%I64d\n", Query(1, nN, 1, nX, nY));<br />            }<br />            <span style="color: #0000FF; ">else</span><br />            {<br />                scanf("%I64d%I64d%I64d", &nX, &nY, &nV);<br />                Update(1, nN, 1, nX, nY, nV);<br />            }<br />        }<br />    }<br />    <br />    <span style="color: #0000FF; ">return</span> 0;<br />}</div>   <img src ="http://www.shnenglu.com/csu-yx-2013/aggbug/190908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/csu-yx-2013/" target="_blank">yx</a> 2012-09-16 20:42 <a href="http://www.shnenglu.com/csu-yx-2013/archive/2012/09/16/190908.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>poj 2886 Who Gets the Most Candies? 綰︾憻澶幆鍜屽弽绱犳暟http://www.shnenglu.com/csu-yx-2013/archive/2012/09/14/190684.htmlyxyxFri, 14 Sep 2012 12:53:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/09/14/190684.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/190684.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/09/14/190684.html#Feedback0http://www.shnenglu.com/csu-yx-2013/comments/commentRss/190684.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/190684.html鍙互鎻愰珮閫熷害錛屾灉鏂敤綰挎鏍戠淮鎶ゅ綋鍓嶄綅緗墠闈㈡湁澶氬皯涓漢銆?br />   鑷充簬鍙嶇礌鏁版寚鐨勬槸姹備竴涓皬浜庣瓑浜嶯鐨勬暟瀛楋紝浣垮緱鍏跺洜瀛愪釜鏁板湪1-N涓槸鏈澶х殑銆傝繖涓埄鐢ㄤ竴涓繀瑕佹潯浠舵毚鍔涙悳绱㈠嵆鍙?br />
鍏跺疄灝辨槸鍒╃敤涓嬮潰榪?涓ц川鎼滅儲鐨勩?br />   鎬ц川涓:涓涓弽绱犳暟鐨勮川鍥犲瓙蹇呯劧鏄粠2寮濮嬭繛緇殑璐ㄦ暟銆?/span>鎬ц川浜?p=2^t1*3^t2*5^t3*7^t4.....蹇呯劧t1>=t2>=t3>=....銆?br />
   浠g爜濡備笅錛?br />
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;

int nPrime[16] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
int nAns;
int nCN;
const int MAX_N = 500010;
//nPow涓嶄細瓚呰繃20
void InitBest(int nCur, int nI, int nMax, int nN, int nNum)
{
    if (nCur > nN) return;
    if (nNum > nCN){nAns = nCur;nCN = nNum;}
    if (nNum == nCN){nAns = min(nAns, nCur);}
    for (int i = 1; i <= nMax; ++i)
    {
        nCur *= nPrime[nI];
        if (nCur > nN)return;//涓嶅姞榪欏彞浼樺寲浼氳秴鏃?/span>
        if (nI < 15)
        InitBest(nCur, nI + 1, i, nN, nNum * (i + 1));
    }
}

char szNames[MAX_N][10];
int nValue[MAX_N];
int nTree[MAX_N << 2];
void PushUp(int nRt)
{
    nTree[nRt] = nTree[nRt << 1] + nTree[nRt << 1 | 1];
}

void BuildTree(int nL, int nR, int nRt, int nV)
{
    if (nL == nR)
    {
        nTree[nRt] = nV;
        return;
    }
    int nMid = (nL + nR) >> 1;
    BuildTree(nL, nMid, nRt << 1, nV);
    BuildTree(nMid + 1, nR, nRt << 1 | 1, nV);
    PushUp(nRt);
}

void Add(int nL, int nR, int nRt, int nP, int nV)
{
    if (nL == nR)
    {
        nTree[nRt] += nV;
    }
    else
    {
        int nMid = (nL + nR) >> 1;
        if (nP <= nMid)Add(nL, nMid, nRt << 1, nP, nV);
        else Add(nMid + 1, nR, nRt << 1 | 1, nP, nV);
        PushUp(nRt);
    }
}

int Query(int nL, int nR, int nRt, int nSum)
{
    if (nL == nR)
    {
        return nL;
    }
    int nMid = (nL + nR) >> 1;
    int nLs = nRt << 1;
    int nRs = nLs | 1;
    if (nTree[nLs] >= nSum) return Query(nL, nMid, nLs, nSum);
    else return Query(nMid + 1, nR, nRs, nSum - nTree[nLs]);
}

int main()
{
    //InitBest(1, 0, 15);
    int nN, nK;
    
    while (scanf("%d%d", &nN, &nK) == 2)
    {
        nK--;
        nAns = 2;
        nCN = 0;
        InitBest(1, 0, 20, nN, 1);
        //printf("ans:%d cn:%d\n", nAns, nCN);
        for (int i = 0; i < nN; ++i)
        {
            scanf("%s%d", szNames[i], &nValue[i]);
        }
        
        BuildTree(0, nN - 1, 1, 1);
        int nTotal = nN;
        int nPos;
        for (int i = 0; i < nAns; ++i)
        {
            nPos = Query(0, nN - 1, 1, nK + 1);
            //printf("nK:%d %s %d\n", nK, szNames[nPos], nValue[nPos]);
            nTotal--;
            Add(0, nN - 1, 1, nPos, -1);
            if (!nTotal)break;
            if (nValue[nPos] >= 0)
            {
                nK = (nK - 1 + nValue[nPos] + nTotal) % nTotal;
            }
            else
            {
                nK = ((nK + nValue[nPos]) % nTotal + nTotal) % nTotal;
            }
        }
        printf("%s %d\n", szNames[nPos], nCN);
    }
    
    return 0;
}


yx 2012-09-14 20:53 鍙戣〃璇勮
]]>
hdu 2492 Ping pong 鏍戠姸鏁扮粍http://www.shnenglu.com/csu-yx-2013/archive/2012/09/12/190442.htmlyxyxWed, 12 Sep 2012 13:11:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/09/12/190442.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/190442.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/09/12/190442.html#Feedback0http://www.shnenglu.com/csu-yx-2013/comments/commentRss/190442.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/190442.html   鏄庢樉鏋氫婦姣忎釜b錛屾眰姣忎釜b宸﹁竟鐨刟鐨勪釜鏁板拰鍙寵竟c鐨勪釜鏁幫紝浠ュ強宸﹁竟c鐨勪釜鏁板拰鍙寵竟a鐨勪釜鏁幫紝鐒跺悗绱姞宸﹀彸涔樼Н姹傚拰鍗沖彲銆?br />   鍒氬紑濮嬪彧姹備簡婊¤凍鏉′歡a<=b<=c鐨勯儴鍒嗭紝鑰屼笖蹇樿鐢?4浣嶄簡銆倃a浜嗗嚑嬈°傛眰宸﹁竟a鐨勪釜鏁板叾瀹炲氨鏄眰灝忎簬絳変簬b鐨勬暟瀛?br />鐨勪釜鏁幫紝榪欎釜鍒氬ソ鍙互鐢ㄦ爲鐘舵暟緇勬垨鑰呯嚎孌墊爲姹傘傚叿浣撹浠g爜銆?br />
   浠g爜濡備笅錛?br />
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
typedef long long INT;
const INT MAX_N =  100010;
const INT N = 20010;
INT nN;
INT nNum[N];
INT nTree[MAX_N + 10];
INT nLeft[2][N], nRight[2][N];

INT LowBit(INT nI)
{
    return nI & (-nI);
}

void Add(INT nI, INT nAdd)
{
    while (nI <= MAX_N)
    {
        nTree[nI] += nAdd;
        nI += LowBit(nI);
    }
}

INT Query(INT nPos)
{
    INT nAns = 0;
    while (nPos > 0)
    {
        nAns += nTree[nPos];
        nPos -= LowBit(nPos);
    }
    return nAns;
}

int main()
{
    INT nT;
    
    scanf("%I64d", &nT);
    while (nT--)
    {
        scanf("%I64d", &nN);
        memset(nTree, 0, sizeof(nTree));
        for (INT i = 1; i <= nN; ++i)
        {
            scanf("%I64d", &nNum[i]);
            nLeft[0][i] = Query(nNum[i]);
            nLeft[1][i] = Query(MAX_N) - Query(nNum[i] - 1);
            Add(nNum[i], 1);
        }
        memset(nTree, 0, sizeof(nTree));
        for (INT i = nN; i >= 1; --i)
        {
            nRight[0][i] = Query(MAX_N) - Query(nNum[i] - 1);
            nRight[1][i] = Query(nNum[i]);
            Add(nNum[i], 1);
        }
        INT nAns = 0;
        for (INT i = 1; i <= nN; ++i)
        {
            nAns += nLeft[0][i] * nRight[0][i] + nLeft[1][i] * nRight[1][i];
        }
        printf("%I64d\n", nAns);
    }
    
    return 0;
}


yx 2012-09-12 21:11 鍙戣〃璇勮
]]>
hdu 3584 Cube 涓夌淮鏍戠姸鏁扮粍http://www.shnenglu.com/csu-yx-2013/archive/2012/09/10/190115.htmlyxyxMon, 10 Sep 2012 07:43:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/09/10/190115.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/190115.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/09/10/190115.html#Feedback0http://www.shnenglu.com/csu-yx-2013/comments/commentRss/190115.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/190115.html   榪樻槸鍒╃敤涓婁竴綃囨枃绔犵殑鎬濇兂錛屾妸緲昏漿鎿嶄綔杞崲涓哄崟鐐規(guī)洿鏂版搷浣溿傛妸鏌ヨ鎿嶄綔杞崲涓哄埄鐢ㄦ爲鐘舵暟緇勬煡璇㈠拰鐨勬柟寮忋?br />榪欐牱姣忔鎿嶄綔鐨勫鏉傚害閮芥槸logN鐨?嬈°傝岀洿鎺ョ炕杞珛鏂逛綋鐨勫鏉傚害鏄疦鐨?嬈°?br />   榪欎釜棰樻渶楹葷儲鐨勫湴鏂規(guī)槸絀洪棿鎯寵薄鑳藉姏銆傚洜涓鴻緲昏漿8涓偣鎵嶈兘瀹屾垚涓嬈$珛鏂逛綋緲昏漿銆傛瘮濡傦紝緲昏漿(x,y,z)鐩稿綋浜?br />浠ヨ鐐逛綔涓哄乏涓婅鍋氫竴涓棤闄愮珛鏂逛綋錛屾妸璇ョ珛鏂逛綋緲昏漿銆傝繖鏍峰氨浼氱炕杞浣欑殑閮ㄥ垎錛岄偅涔堥渶瑕佹妸澶氱炕杞殑閮ㄥ垎緲昏漿
鍥炴潵銆傛渶鍚庣殑鎬濊冪粨鏋滃彂鐜幫紝鍙瀵規(guī)瘡涓《鐐圭炕杞竴嬈″嵆鍙傝嚦浜庝負浠涔堣繖鏍鳳紝鑷繁鍘昏綆楅噸澶嶇炕杞殑閮ㄥ垎灝變細鏄庣櫧
浜嗐傚垰濂界‘瀹炴槸鎶婃瘡涓偣緲昏漿浜嗕竴嬈°?br />   
   浠g爜濡備笅錛?br />
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

const int MAX_N = 110;
int nSum[MAX_N + 10][MAX_N + 10][MAX_N + 10];
int nN, nM;

int LowBit(int nPos)
{
    return nPos & (-nPos);
}

void Add(int nX, int nY, int nZ)
{
    for (int i = nX; i <= nN; i += LowBit(i))
    {
        for (int j = nY; j <= nN; j += LowBit(j))
        {
            for (int k = nZ; k <= nN; k += LowBit(k))
            {
                nSum[i][j][k]++;
            }
        }
    }
}

int Query(int nX, int nY, int nZ)
{
    int nAns = 0;
    
    for (int i = nX; i > 0; i -= LowBit(i))
    {
        for (int j = nY; j > 0; j -= LowBit(j))
        {
            for (int k = nZ; k > 0; k -= LowBit(k))
            {
                nAns += nSum[i][j][k];
            }
        }
    }
    return nAns;
}

int main()
{
    int nCmd;
    int nX, nY, nZ;
    int nX1, nY1, nZ1;
    int nX2, nY2, nZ2;
    
    while (scanf("%d%d", &nN, &nM) == 2)
    {
        memset(nSum, 0, sizeof(nSum));
        while (nM--)
        {
            scanf("%d", &nCmd);
            if (nCmd == 0)
            {
                scanf("%d%d%d", &nX, &nY, &nZ);
                printf("%d\n", Query(nX, nY, nZ) % 2);
            }
            else
            {
                scanf("%d%d%d%d%d%d", &nX1, &nY1, &nZ1, &nX2, &nY2, &nZ2);
                if (nX1 > nX2)swap(nX1, nX2);
                if (nY1 > nY2)swap(nY1, nY2);
                if (nZ1 > nZ2)swap(nZ1, nZ2);
                Add(nX1, nY1, nZ1);
                
                Add(nX2 + 1, nY1, nZ1);
                Add(nX1, nY2 + 1, nZ1);
                Add(nX1, nY1, nZ2 + 1);
                
                Add(nX1, nY2 + 1, nZ2 + 1);
                Add(nX2 + 1, nY1, nZ2 + 1);
                Add(nX2 + 1, nY2 + 1, nZ1);
                
                Add(nX2 + 1, nY2 + 1, nZ2 + 1);
            }
        }
    }
    
    return 0;
}


yx 2012-09-10 15:43 鍙戣〃璇勮
]]>
hdu 1556 Color the ball 鏍戠姸鏁扮粍http://www.shnenglu.com/csu-yx-2013/archive/2012/09/06/189741.htmlyxyxThu, 06 Sep 2012 12:51:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/09/06/189741.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/189741.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/09/06/189741.html#Feedback0http://www.shnenglu.com/csu-yx-2013/comments/commentRss/189741.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/189741.html   榪欎釜棰樿矊浼煎彲浠ユ墿灞曞埌澶氱淮鐨勬儏鍐碉紝浣嗘槸澶氱淮鐨勬儏鍐典笅蹇呴』鐢ㄦ爲鐘舵暟緇勬眰鍜屼互鍔犲揩閫熷害錛屼竴緇寸殑鎯呭喌鐩存帴姹傚拰鍗沖彲銆?br />   鍋囧錛岀涓嬈℃秱鑹叉槸瀵瑰尯闂碵A,B]娑傝壊涓嬈★紝鍙互璁﹏Num[nA]++,nNum[nB+1]--鍗沖彲銆傚洜涓鴻繖鏍峰浜庡尯闂碵0,nA-1]鐨勪換鎰忓糹鏈?br />閮借nNum[1]+nNum[2]+...+nNum[i] = 0銆傝屽浜庡尯闂碵nA,nB]鐨勪換鎰忓糹鏈塶Num[1]+nNum[2]+...+nNum[i] = 0銆?br />瀵逛簬鍖洪棿[nB+1, nN]鐨勪換鎰忓糹鏈塶Num[1]+nNum[2]+...+nNum[i] = 0銆?br />   閭d箞閲嶅澶氭浜嗐傚鏋滀笂榪版眰鍜宯Num[1]+nNum[2]+...+nNum[i] 鍒氬ソ浠h〃姣忎釜緇撶偣i鐨勬秱鑹叉鏁幫紝閭d箞榪欎釜棰樺氨鍙В浜嗐?br />   鐢ㄤ緥瀛愰獙璇佷竴涓嬶紝鍙戠幇鑲畾鏄繖鏍風殑銆傝瘉鏄庣暐浜嗐?br />   鑷充簬鏍戠姸鏁扮粍緗戜笂涓澶у爢璧勬枡銆傛爲鐘舵暟緇勬ā鏉垮崟涓錛屾暡浠g爜澶柟渚夸簡銆?br />
   浠g爜濡備笅錛?br />
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

int nNum[100000 + 10];
int nN;
int LowBit(int nI)
{
    return nI & (-nI);
}

void Add(int nI, int nAdd)
{
    while (nI <= nN)
    {
        nNum[nI] += nAdd;
        nI += LowBit(nI);
    }
}

int GetSum(int nI)
{
    int nAns = 0;
    
    while (nI > 0)
    {
        nAns += nNum[nI];
        nI -= LowBit(nI);
    }
    return nAns;
}

int main()
{
    int nA, nB;
    
    while (scanf("%d", &nN), nN)
    {
        memset(nNum, 0, sizeof(nNum));
        
        for (int i = 1; i <= nN; ++i)
        {
            scanf("%d%d", &nA, &nB);
            Add(nA, 1);
            Add(nB + 1, -1);
        }
        for (int i = 1; i <= nN; ++i)
        {
            printf("%d%s", GetSum(i), i == nN ? "\n" : " ");
        }
    }

    return 0;
}


yx 2012-09-06 20:51 鍙戣〃璇勮
]]>
poj 2823 Sliding Window 鍗曡皟闃熷垪http://www.shnenglu.com/csu-yx-2013/archive/2012/09/02/189137.htmlyxyxSun, 02 Sep 2012 06:25:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/09/02/189137.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/189137.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/09/02/189137.html#Feedback2http://www.shnenglu.com/csu-yx-2013/comments/commentRss/189137.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/189137.html   鍒氬紑濮嬭繕浠ヤ負浼樺厛綰ч槦鍒楀彲浠ュ仛錛屽彂鐜版棤娉曞垹闄ゆ渶鍓嶉潰鐨勫厓绱犮備及璁$敤綰挎鏍戣繖涓涔熸槸鍙互瑙e緱銆傜敤榪欎釜棰樺浜嗕笅鍗曡皟闃熷垪銆?br />   
   鍗曡皟闃熷垪姝e鍏跺悕錛屾槸涓涓粠灝忓埌澶ф帓搴忕殑闃熷垪錛岃屼笖鑳藉淇濊瘉鎵鏈夌殑鍏冪礌鍏ラ槦鍒椾竴嬈″嚭闃熷垪涓嬈★紝鎵浠ュ鉤鎽婂埌姣忎釜鍏冪礌鐨勫鏉傚害
灝辨槸O(1)銆?br />   瀵逛簬榪欎釜棰樺崟璋冮槦鍒楃殑浣跨敤銆備互搴忓垪1 3 -1 -3 5 3 6 7涓句緥銆?/span>
   1錛夊厓绱犵被鍨嬶細涓涓粨鏋勪綋錛屽寘鍚暟瀛楀ぇ灝忓拰浣嶇疆錛屾瘮濡?1錛?錛夛紝錛?錛?錛夈?br />   2錛夋彃鍏ユ搷浣滐細浠庨槦灝懼紑濮嬫煡鎵撅紝鎶婇槦灝懼皬浜庡緟鎻掑叆鍏冪礌鐨勫厓绱犲叏閮ㄥ垹闄わ紝鍐嶅姞鍏ュ緟鎻掑叆鐨勫厓绱犮傝繖涓搷浣滄渶鍧忕殑
鎯呭喌涓嬫槸O(n)錛屼絾鏄垜浠噰鐢ㄨ仛闆嗗垎鏋愮殑鏂規(guī)硶錛岀煡閬撴瘡涓厓绱犳渶澶氬垹闄や竴嬈★紝閭d箞N涓厓绱犲垹闄嬈★紝騫蟲憡鍒版瘡涓嬈?br />鎿嶄綔鐨勫鏉傚害灝辨槸O(1)浜嗐?br />   3錛夊垹闄ら槦棣栧厓绱狅細姣斿鏈枃緇欑殑閭d釜棰橈紝紿楀彛涓鐩村線鍚庣Щ鍔紝姣忎竴嬈$Щ鍔ㄩ兘浼氬垹闄や竴涓厓绱狅紝鎵浠ュ緢鍙兘闃熼浼氭槸瑕?br />鍒犻櫎鐨勫厓绱狅紝閭d箞姣忔縐誨姩紿楀彛鐨勫厓绱犺榪涜涓嬈℃鏌ワ紝濡傛灉闃熼鍏冪礌澶辨晥鐨勮瘽錛屽氨鍒犳帀闃熼鍏冪礌銆?br />
   浠g爜鐨勫疄鐜幫紝鎴戞槸鍖呰deque瀹炵幇浜嗕竴涓ā鐗堢被銆傞熷害寰堜笉濂斤紝灞呯劧璺戜簡11s澶氭墠榪囷紝騫鎬簭緇欎簡12s鐨勬椂闂達紝鐪媠tatus鍙?00澶歮s
灝辮繃浜嗙殑銆備及璁℃暟緇勫疄鐜頒細蹇緢澶氥?br />
   浠g爜濡備笅錛?br />
#include <stdio.h>
#include <deque>
#include <algorithm>
using namespace std;
#define MAX_N (1000000 + 100)
int nNum[MAX_N];
int nN, nK;

struct Small
{
    int nValue;
    int nIndex;
    Small(int nV, int index):nValue(nV), nIndex(index) {}
    bool operator < (const Small& a) const
    {
        return nValue < a.nValue;
    }
};

struct Big
{
    int nValue;
    int nIndex;
    Big(int nV, int index):nValue(nV), nIndex(index) {}
    bool operator < (const Big& a) const
    {
        return nValue > a.nValue;
    }
};

//鍗曡皟闃熷垪
template <typename T> class Monoque
{
    deque<T> dn;

public:
    void Insert(T node)
    {
        int nPos = dn.size() - 1;
        while (nPos >=0 && node < dn[nPos])
        {
            --nPos;
            dn.pop_back();
        }
        dn.push_back(node);
    }

    int Top()
    {
        return dn.front().nValue;
    }

    void Del(int nBeg, int nEnd)
    {
        if (dn.size() > 0)
        {
            if (dn.front().nIndex < nBeg || dn.front().nIndex > nEnd)
            {
                dn.pop_front();
            }
        }
    }
};

int main()
{
    while (scanf("%d%d", &nN, &nK) == 2)
    {
        int i;
        for (i = 0; i < nN; ++i)
        {
            scanf("%d", &nNum[i]);
        }
        Monoque<Small> minQ;
        Monoque<Big> maxQ;

        for (i = 0; i < nK; ++i)
        {
            minQ.Insert(Small(nNum[i], i));
        }

        for (i = 0; i < nN - nK; ++i)
        {
            printf("%d ", minQ.Top());
            minQ.Insert(Small(nNum[i + nK], i + nK));
            minQ.Del(i + 1, i + nK);
        }
        printf("%d\n", minQ.Top());

        for (i = 0; i < nK; ++i)
        {
            maxQ.Insert(Big(nNum[i], i));
        }

        for (i = 0; i < nN - nK; ++i)
        {
            printf("%d ", maxQ.Top());
            maxQ.Insert(Big(nNum[i + nK], i + nK));
            maxQ.Del(i + 1, i + nK);
        }
        printf("%d\n", maxQ.Top());
    }

    return 0;
}


yx 2012-09-02 14:25 鍙戣〃璇勮
]]>
hdu 3627 Giant Forhttp://www.shnenglu.com/csu-yx-2013/archive/2012/07/26/185162.htmlyxyxThu, 26 Jul 2012 04:22:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/07/26/185162.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/185162.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/07/26/185162.html#Feedback0http://www.shnenglu.com/csu-yx-2013/comments/commentRss/185162.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/185162.html鍚庨潰鐭ラ亾綰挎鏁板彲浠ュ仛錛岃櫧鐒舵暟鎹殑鑼冨洿寰堝ぇ錛屼絾鏄彲浠ュ湪鍏ㄩ儴璇誨叆鏁版嵁鍚庢帓搴忓啀紱繪暎鍖栵紝鐒跺悗榪涜綰挎鏍戠殑鎿嶄綔錛屽叿浣撶殑浠g爜娌℃湁鍐欍?br />   浠婂ぉ闃熷弸鍦ㄧ綉涓婂彂鐜頒竴縐嶇敤map鍜宻et鍙互姘存帀榪欓鐨勬柟娉曘傚師鏉ワ紝榪欎釜鏂規(guī)硶鏈涓昏鐨勪嬌鐢ㄤ簡map鍜宻et閲岄潰鐨剈pper_bound鎿嶄綔錛屼互鍓?br />灞呯劧蹇樿浜嗚繖涓笢瑗夸簡銆傛棦鐒惰繖鏍鳳紝map鍜宻et涔熷彲浠ユ煡鍓嶉┍鍜屽悗緇т簡錛屼絾鏄敞鎰弆ow_bound鏌ュ埌鐨勬槸灝忎簬絳変簬鐨勯敭銆傝繖涓唬鐮侊紝娉ㄦ剰鏄敤
浜嗕竴涓猰ap< int, set<int> > 闆嗗悎鎶婂潗鏍囬兘瀛樿搗鏉ヤ簡錛岃繘琛屾坊鍔犲垹闄ゅ拰鏌ユ壘鍚庣戶鐨勬搷浣溿傜敱浜庢煡鎵鵑渶瑕佹煡鎵劇殑鍏冪礌鏄棦姣攛澶у張姣攜澶х殑鍏?br />绱狅紝灝辨瘮杈冮夯鐑︼紝闇瑕佸驚鐜痻寰鍚庢煡鎵撅紝浣嗘槸榪欐牱灝辨棤鎯呯殑瓚呮椂浜嗐傜劧鍚庯紝鏈変竴涓紭鍖栵紝璁板綍y鐨勬暟鐩紝閭d箞褰撳嚭鐜板緢澶х殑y鐨勬椂鍊欙紝灝變笉闇瑕?br />鏌ユ壘浜嗭紝鐒跺悗鎵嶈繃浜嗚繖涓銆備絾鏄紝鏁版嵁鍙樻垚寰堝ぇ鐨剏瀵瑰簲鐨剎寰堝皬鐨勮瘽錛岄偅涔堢粷瀵硅繃涓嶄簡榪欎釜棰樹簡錛屽彧鑳界敤綰挎鏍戝仛浜嗐?br />   鐜板湪瑙夊緱鐢╩ap鍜宻et鏌ユ壘鍓嶉┍鍜屽悗緇х‘瀹炶兘姘存帀涓浜涢鍟娿?br />
   浠g爜濡備笅錛?br />
#include <map>
#include <set>
#include <stdio.h>
using namespace std;

map< intset<int> > ms;//瀛樺偍x,y
map< intset<int> >::iterator it;
map<intint> my;//瀛樺偍y鐨勬暟鐩?/span>
set<int>::iterator msit;
int main()
{
    int nN;
    int nCase = 1;
    char szCmd[10];
    int nX, nY;
    int nTemp;

    while(scanf("%d", &nN), nN)
    {
        if (nCase > 1)
        {
            printf("\n");
        }
        
        printf("Case %d:\n", nCase++);
        ms.clear();
        my.clear();
        while (nN--)
        {
            scanf("%s", szCmd);
            scanf("%d%d", &nX, &nY);
            if (szCmd[0] == 'a')
            {
                if (my.find(nY) == my.end())
                {
                    my[nY] = 1;
                }
                else
                {
                    my[nY]++;
                }
                
                if (ms.find(nX) == ms.end())
                {
                    ms[nX].insert(nY);
                }
                else
                {
                    msit = ms[nX].find(nY);
                    if (msit == ms[nX].end())//浼氬嚭鐜伴噸澶嶇殑鏁版嵁
                    {
                        ms[nX].insert(nY);
                    }
                }
            }
            else if (szCmd[0] == 'r')
            {
                ms[nX].erase(nY);
                if(ms[nX].size() == 0)
                {
                    ms.erase(nX);
                }
                my[nY]--;
                if (my[nY] == 0)
                {
                    my.erase(nY);
                }
            }
            else if (szCmd[0] == 'f')
            {
                if (my.upper_bound(nY) == my.end())
                {
                    printf("-1\n");
                    continue;
                }
                while (true)
                {
                    it = ms.upper_bound(nX);
                    if (it == ms.end())//姣攏X澶х殑涓嶅瓨鍦?/span>
                    {
                        printf("-1\n");
                        break;
                    }
                    nTemp = it->first;
                    msit = ms[nTemp].upper_bound(nY);
                    if (msit == ms[nTemp].end())//姣攏Y澶х殑涓嶅瓨鍦?/span>
                    {
                        nX = nTemp;
                        continue;//閭d箞澧炲姞x,緇х畫寰鍚庢煡
                    }
                    else
                    {
                        printf("%d %d\n", nTemp, *msit);
                        break;
                    }
                }
            }
        }
    }

    return 0;
}


yx 2012-07-26 12:22 鍙戣〃璇勮
]]>
uva 10562 - Undraw the Treeshttp://www.shnenglu.com/csu-yx-2013/archive/2012/07/10/182695.htmlyxyxTue, 10 Jul 2012 13:35:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/07/10/182695.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/182695.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/07/10/182695.html#Feedback0http://www.shnenglu.com/csu-yx-2013/comments/commentRss/182695.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/182695.html浠涔堢殑銆?br />    姣斿錛?br />      A

    |

--------

B  C   D

   |   |

 ----- -

 E   F G 瀵瑰簲鐨勫瓧絎︿覆琛ㄧず (A(B()C(E()F())D(G())))

   
   姣旇緝綰犵粨鐨勬槸濡備綍璇誨彇鏁版嵁錛屽浣曢掑綊錛屽鏋滃緩绔嬫爲鐨勮瘽錛屼篃楹葷儲錛屽洜涓鴻繕鏄涓嶅畾鍙夌殑鏍戙傛渶涓昏鐨勬槸濡備綍鏂逛究鍦伴掑綊銆傛渶鍚庣煡閬撲簡涓涓?br />姣旇緝宸у鐨勬柟娉曪紝鍏堜竴嬈℃ф妸涓緇勬暟鎹鍏ュ瓧絎︿覆鏁扮粍閲岄潰錛屽啀鍦ㄨ繖涓瓧絎︿覆鏁扮粍涓婅繘琛岄掑綊澶勭悊銆傝繖鏍風殑璇濓紝灝辮兘寰堟柟渚跨殑鎵懼埌鏍戦噷闈㈣妭鐐?br />鐨勫叧緋諱簡銆?br />   鑰屼竴嬈¤涓涓瓧絎﹀氨鎯寵繘琛岄掑綊鏄病鍔炴硶紜畾鑺傜偣鐨勫叧緋葷殑錛屼笉閫掑綊浼拌鏇村緢闅懼啓錛屽畬鍏ㄦ病澶寸華銆傘傘?br />
浠g爜濡備笅錛?br />
 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 char szLines[210][210];
 5 int nNumOfLine;
 6 
 7 void GetAns(int i, int j)
 8 {
 9     //printf("i:%d, j:%d, %c\n", i, j, szLines[i][j]);
10     
11     if (szLines[i][j] != '\0')
12     {
13         putchar(szLines[i][j]);
14         //printf("%c", szLines[i + 1][j]);
15         if (szLines[i + 1][j] == '|')
16         {
17             int nBeg, nEnd;
18             nBeg = nEnd = j;
19             while (nBeg >= 0 && szLines[i + 2][nBeg] == '-')
20             {
21                 --nBeg;
22             }
23             while (szLines[i + 2][nEnd] == '-')
24             {
25                 ++nEnd;
26             }
27             //printf("nBeg:%d, nEnd:%d\n", nBeg, nEnd);
28             putchar('(');
29             for (int k = nBeg; k <= nEnd; ++k)
30             {
31                 if (szLines[i + 3][k] != ' ' && szLines[i + 3][k] != '\0')
32                 {
33                     GetAns(i + 3, k);
34                 }
35             }
36             putchar(')');
37         }
38         else
39         {
40             printf("()");
41         }
42     }
43     
44 }
45 
46 int main()
47 {
48     int nN;
49     char ch;
50 
51     scanf("%d", &nN);
52     getchar();
53     while (nN--)
54     {
55         nNumOfLine = 0;
56         memset(szLines, 0, sizeof(szLines));
57         while (gets(szLines[nNumOfLine]), szLines[nNumOfLine][0] != '#')
58         {
59             //printf("%s\n", szLines[nNumOfLine]);
60             nNumOfLine++;
61         }
62         if (nNumOfLine == 0)
63         {
64             printf("()\n");
65             continue;
66         }
67         int i, j;
68         i = 0;
69         for (j = 0; szLines[0][j] == ' '; ++j);
70         //printf("i:%d, j:%d\n", i, j);
71         putchar('(');
72         GetAns(i, j);
73         putchar(')');
74         putchar('\n');
75     }
76     
77     return 0;
78 }
79 


yx 2012-07-10 21:35 鍙戣〃璇勮
]]>
uva 327 - Evaluating Simple C Expressionshttp://www.shnenglu.com/csu-yx-2013/archive/2012/07/10/182587.htmlyxyxTue, 10 Jul 2012 04:05:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/07/10/182587.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/182587.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/07/10/182587.html#Feedback0http://www.shnenglu.com/csu-yx-2013/comments/commentRss/182587.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/182587.html姣斿錛岃〃杈懼紡 c+f--+--a錛屽緱鍑哄兼槸9錛屽叾瀹冨彉閲忕殑鍊間篃闇瑕佽綆楀嚭鏉ャ?/span>   
   榪欎釜棰樼洰鎰熻姣旇緝楹葷儲錛屽垰寮濮嬩竴鐐規(guī)濊礬涔熸病鏈夛紝榪樺啓浜嗕釜閿欒鐨勬柟娉曪紝嫻垂浜嗘椂闂淬?br />   鍚庨潰鎴戠殑鎬濊礬鏄?錛?錛?錛?錛?-錛?+錛夛紙鍙橀噺錛夛紙--錛?+錛夛紝榪欎釜鍖歸厤寮忓瓙鐨勬剰鎬濇槸鍏堝鐞嗕簩鍏冩搷浣滅錛岀劧鍚庡鐞嗗墠緗紝鍐嶅鐞嗗彉閲忥紝
鍐嶅鐞嗗悗緗紝濡傛灉鍙戠幇娌℃湁鍚庣疆鎿嶄綔絎︼紝鍒欐妸璇誨彇鐨勬暟鎹噸鏂板啓鍥炴暟鎹祦閲岄潰錛屼笅嬈″啀澶勭悊銆?br />
   浠g爜濡備笅錛?span style="font-size: 13px; color: #008080; "> 

  1 #include <stdio.h> 
  2 #include <string.h>
  3 #include <sstream>
  4 #include <algorithm>
  5 using namespace std;
  6 struct INFO
  7 {
  8     char ch;
  9     int nValue;
 10     char chAdd;
 11     bool operator < (const INFO& info) const
 12     {
 13         return ch < info.ch;
 14     }
 15 };
 16 
 17 INFO infos[200];
 18 char szLine[200];
 19 
 20 bool GetNextChar(stringstream& ss, char& ch)
 21 {
 22     while (ss >> ch)
 23     {
 24         if (ch != ' ');
 25         {
 26             return true;
 27         }
 28     }
 29     return false;
 30 }
 31 
 32 int main()
 33 {
 34     while (gets(szLine))
 35     {
 36         printf("Expression: %s\n", szLine);
 37         memset(infos, 0, sizeof(infos));
 38         stringstream ss(szLine);
 39         char ch;
 40         int nNum = 0;
 41         int nValue = 0;
 42         char chOper;
 43         bool bOk = true;
 44         bool bFirst = true;
 45         while (1)
 46         {
 47             if (bFirst)
 48             {
 49                 chOper = '+';
 50                 bFirst = false;
 51             }
 52             else
 53             {
 54                 bOk = GetNextChar(ss, ch);
 55                 if (!bOk) break;
 56                 chOper = ch;
 57             }
 58 
 59             bOk = GetNextChar(ss, ch);
 60             if (!bOk) break;
 61 
 62             if (ch == '-')//鍓嶇疆--
 63             {
 64                 bOk = GetNextChar(ss, ch);
 65                 if (!bOk) break;//-
 66                 bOk = GetNextChar(ss, ch);
 67                 if (!bOk) break;//璇誨彇瀛楁瘝
 68 
 69                 infos[nNum].ch = ch;
 70                 infos[nNum].nValue = ch - 'a';
 71 
 72                 if (chOper == '+')
 73                 {
 74                     nValue += infos[nNum].nValue;
 75                 }
 76                 else
 77                 {
 78                     nValue -= infos[nNum].nValue;
 79                 }
 80                 ++nNum;
 81             }
 82             else if (ch == '+')//鍓嶇疆++
 83             {
 84                 bOk = GetNextChar(ss, ch);
 85                 if (!bOk) break;//+
 86                 bOk = GetNextChar(ss, ch);
 87                 if (!bOk) break;//璇誨彇瀛楁瘝
 88 
 89                 infos[nNum].ch = ch;
 90                 infos[nNum].nValue = ch - 'a' + 2;
 91 
 92                 if (chOper == '+')
 93                 {
 94                     nValue += infos[nNum].nValue;
 95                 }
 96                 else
 97                 {
 98                     nValue -= infos[nNum].nValue;
 99                 }
100                 ++nNum;
101             }
102             else
103             {
104                 infos[nNum].ch = ch;
105                 infos[nNum].nValue = ch - 'a' + 1;
106 
107                 if (chOper == '+')
108                 {
109                     nValue += infos[nNum].nValue;
110                 }
111                 else
112                 {
113                     nValue -= infos[nNum].nValue;
114                 }
115 
116                 //璇誨彇鍚庣疆鎿嶄綔絎?/span>
117                 char chOne;
118                 char chTwo;
119                 bOk = GetNextChar(ss, chOne);
120                 if (!bOk)
121                 {
122                     ++nNum;
123                     break;
124                 }
125                 bOk = GetNextChar(ss, chTwo);
126                 if (!bOk)
127                 {
128                     ++nNum;
129                     break;
130                 }
131 
132                 if (chOne == chTwo)
133                 {
134                     if (chOne == '+')
135                     {
136                         infos[nNum].chAdd = '+';
137                     }
138                     else
139                     {
140                         infos[nNum].chAdd = '-';
141                     }
142                 }
143                 else
144                 {
145                     ss.putback(chTwo);
146                     ss.putback(chOne);
147                 }
148                 ++nNum;
149             }
150         }
151 
152         printf("    value = %d\n", nValue);
153         sort(infos, infos + nNum);
154         for (int i = 0; i < nNum; ++i)
155         {
156             if (infos[i].chAdd == '+')
157             {
158                 infos[i].nValue++;
159             }
160             else if (infos[i].chAdd == '-')
161             {
162                 infos[i].nValue--;
163             }
164             printf("    %c = %d\n", infos[i].ch, infos[i].nValue);
165         }
166     }
167 
168     return 0;
169 }
170 


yx 2012-07-10 12:05 鍙戣〃璇勮
]]>
uva 297 - Quadtreeshttp://www.shnenglu.com/csu-yx-2013/archive/2012/07/08/182186.htmlyxyxSun, 08 Jul 2012 03:06:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/07/08/182186.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/182186.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/07/08/182186.html#Feedback0http://www.shnenglu.com/csu-yx-2013/comments/commentRss/182186.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/182186.html   綾諱技鏍戝艦緇撴瀯鐨勪笢瑗匡紝鐩存帴涓涓嚱鏁伴掑綊姹傝В鍗沖彲銆傚嚱鏁板弬鏁幫紝涓鑸槸瀛楃涓插湴鍧錛屽綋鍓嶄綅緗紝鐒跺悗榪樻湁鍏跺畠鍦ㄩ掑綊鏃跺欓渶瑕佺敤鍒扮殑涓滆タ銆?br />
   浠g爜濡備笅錛?font size="2">
 1 #include <stdio.h> 
 2 #define BLACK (1)
 3 #define WHITE (2)
 4 #define MAX (32)
 5 int nStateA[MAX][MAX];
 6 int nStateB[MAX][MAX];
 7 
 8 char szOne[10000];
 9 char szTwo[10000];
10 
11 void GetState(int nState[MAX][MAX], char* pszLine, int& nPos,
12               int nSize, int nX, int nY)
13 {
14     if (pszLine[nPos] == 'p')
15     {
16         ++nPos;
17         GetState(nState, pszLine, nPos, nSize / 2, nX + nSize / 2, nY);
18         GetState(nState, pszLine, nPos, nSize / 2, nX, nY);
19         GetState(nState, pszLine, nPos, nSize / 2, nX, nY + nSize / 2);
20         GetState(nState, pszLine, nPos, nSize / 2, nX + nSize / 2, nY + nSize / 2);
21     }
22     else
23     {
24         for (int i = nX; i < nX + nSize; ++i)
25         {
26             for (int j = nY; j < nY + nSize; ++j)
27             {
28                 if (pszLine[nPos] == 'e')
29                 {
30 
31                     nState[i][j] = WHITE;
32                 }
33                 else
34                 {
35                     nState[i][j] = BLACK;
36                 }
37             }
38         }
39         ++nPos;
40     }
41 }
42 
43 int main()
44 {
45     int nCases;
46 
47     scanf("%d\n", &nCases);
48     while (nCases--)
49     {
50         gets(szOne);
51         gets(szTwo);
52         int nPos = 0;
53         GetState(nStateA, szOne, nPos, MAX, 0, 0);
54         nPos = 0;
55         GetState(nStateB, szTwo, nPos, MAX, 0, 0);
56         int nAns = 0;
57 
58         for (int i = 0; i < MAX; ++i)
59         {
60             for (int j = 0; j < MAX; ++j)
61             {
62                 if (nStateA[i][j] == BLACK || nStateB[i][j] == BLACK)
63                 {
64                     nAns++;
65                 }
66             }
67         }
68         printf("There are %d black pixels.\n", nAns);
69     }
70 
71     return 0;
72 }
73 


yx 2012-07-08 11:06 鍙戣〃璇勮
]]>
鏃犵┓澶ф暟緇勪笂濡備綍鐩存帴瀵誨潃鏉ュ疄鐜板瓧鍏革紵http://www.shnenglu.com/csu-yx-2013/archive/2012/03/20/168422.htmlyxyxTue, 20 Mar 2012 11:26:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/03/20/168422.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/168422.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/03/20/168422.html#Feedback7http://www.shnenglu.com/csu-yx-2013/comments/commentRss/168422.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/168422.html   鍏蜂綋棰樼洰濡備笅錛?br />   
     
   瑙e喅璇ラ鐩殑瑕佺偣錛?br />   1.鐢變簬鏄棤絀峰ぇ鐨勬暟緇勶紝鎵浠ユ棤娉曚簨鍏堝垵濮嬪寲璇ユ暟緇勩?br />   2.鎵鎻愪緵鐨勬柟妗堝繀欏繪槸O錛?錛夈?br />   3.浣跨敤鐨勯澶栫┖闂村彧鑳芥槸O錛坣錛夛紝榪欐牱騫沖潎鍒版瘡涓涓」涓婄殑絀洪棿閮芥槸O錛?錛夈?br />
   涓鏃朵箣闂村ソ鍍忔病鏈変竴鐐瑰ご緇紝鍦ㄥ嚑涓兢閲岄潰鍙戦棶浜嗭紝緗戜笂鎼滀簡寰堜箙涔熸病鏈夋壘鍒扮瓟妗堬紝鍚庨潰涓緹ら噷鏈変釜楂樹漢緇欎簡涓摼鎺ワ紝閲岄潰鏈夎В娉曘?br />閾炬帴鍦板潃錛歨ttp://www.cnblogs.com/flyfy1/archive/2011/03/05/1971502.html錛岃繖綃囨枃绔犻噷闈㈠彟澶栫粰浜嗕釜pdf錛岃繖涓猵df浼拌鏄В娉?br />鐨勬潵婧愩備吉浠g爜鍐欏緱涓嶇粰鍔涳紝涓嶈繃鍓嶉潰鐨勮嫳鏂囨弿榪板嵈寰堟竻鏅般傝瀹炶瘽錛岃繖涓柟娉曞緢宸у銆?br />
   瑙f硶澶ф鐨勬剰鎬濆涓嬶細
   寮涓涓澶栫殑鏁扮粍A錛孉[0]琛ㄧずA鏁扮粍鍏冪礌鐨勬暟鐩?褰撶劧涓嶅寘鎷珹[0]鏈韓)錛孉[i]浠h〃鎻掑叆鐨勭i涓厓绱犵殑key銆傚亣璁懼師鏉ョ殑鏃犵┓澶ф暟緇勭敤Huge
琛ㄧず錛屽鏋淗uge[i](鐩存帴瀵誨潃錛屽亣璁緄灝辨槸key)鏈夋晥錛屽垯琛ㄧず鍏跺湪A鏁扮粍涓殑绱㈠紩銆傞偅涔堝鏋淎[Huge[i]] == i 鑰屼笖 Huge[i] <= A[0] &&
Huge[i] > 0錛屽垯琛ㄧずi榪欎釜浣嶇疆宸茬粡鏈夊厓绱犳彃鍏ヤ簡銆?br />
   鎻掑叆錛欰[0]++;A[A[0]] = key; Huge[key] = A[0];
   鎼滅儲:  A[Huge[i]] == i && Huge[i] <= A[0] && Huge[i] > 0 鍒檙eturn true;
   鍒犻櫎:  鍏堟悳绱㈣浣嶇疆鏄惁鏈夊厓绱? 濡傛灉Search(key)鎴愬姛錛屽垯鍏堟妸Huge[ A[A[0]] ] = Huge[key]錛?br />            鐒跺悗浜ゆ崲A[A[0]]鍜孉[Huge[key]]錛孉[0]--鍗沖彲銆?br />   鎵鏈夋搷浣滈兘鏄疧錛?錛夛紝騫沖潎鍒版瘡涓涓」錛屼嬌鐢ㄧ殑絀洪棿閮芥槸O錛?錛夈?br />
   鎴戠敤浠g爜瀹炵幇鐨勬ā鎷熷涓嬶細
#include <stdio.h>
#include <vector>
#include <algorithm>
using std::swap;
using std::vector;
#define INF (100)

int nHuge[INF];//鍋囪榪欎釜宸ㄥぇ鐨勬暟緇勬槸鏃犳硶鍒濆鍖栫殑
vector<int> vA;

void Init()
{
    vA.push_back(0);//娣誨姞A[0]琛ㄧず鍏冪礌鐨勬暟鐩?/span>
}

void Insert(int nKey)
{
    vA[0]++;
    nHuge[nKey] = vA[0];
    vA.push_back(nKey);
}

bool Search(int nKey)
{
    if (nHuge[nKey] > 0 && nHuge[nKey] <= vA[0] && vA[nHuge[nKey]] == nKey)
    {
        return true;
    }

    return false;
}

void Delete(int nKey)
{
    if (Search(nKey))
    {
        nHuge[ vA[vA[0]] ] = nHuge[nKey];//灝唄uge鐨勬渶鍚庝竴涓厓绱犱腑瀛樺偍鐨凙鏁扮粍鐨勭儲寮曟敼涓簄Huge[nKey]
        swap(vA[vA[0]], vA[nHuge[nKey]]);//浜ゆ崲key
        --vA[0];
        vA.erase(vA.end() - 1);
    }
}

#define MAX (10)
int main()
{
    Init();
    int i;
    for (i = 0; i < MAX; ++i)
    {
        Insert(i);
    }
    for (i = 0; i < MAX; ++i)
    {
        printf("Search:%d %s\n", i, Search(i) == true? "Success" : "Failure");
    }
    printf("\n");

    Delete(4);
    Delete(9);
    Delete(1);
    for (i = 0; i < MAX * 2; ++i)
    {
        printf("Search:%d %s\n", i, Search(i) == true? "Success" : "Failure");
    }

    return 0;
}


yx 2012-03-20 19:26 鍙戣〃璇勮
]]>
涓や釜鏍堝疄鐜頒竴涓槦鍒?鍜?涓や釜闃熷垪瀹炵幇涓涓爤http://www.shnenglu.com/csu-yx-2013/archive/2012/03/11/167673.htmlyxyxSun, 11 Mar 2012 12:30:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2012/03/11/167673.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/167673.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2012/03/11/167673.html#Feedback0http://www.shnenglu.com/csu-yx-2013/comments/commentRss/167673.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/167673.html   瑕佹眰錛氬彧鑳戒嬌鐢ㄦ爤鐨刾op鍜宲ush錛屼互鍙婃祴璇曟爤鏄惁涓虹┖涓変釜鎿嶄綔銆?br />   瀹炵幇鎬濊礬錛?br />      闃熷垪閲岄潰浣跨敤stack one 鍜?stack two銆?br />      榪涢槦鍒楁椂錛岀洿鎺ヨ繘鍏ユ爤one鍗沖彲銆?br />      鍑洪槦鍒楁椂錛屼粠two寮瑰嚭涓涓厓绱狅紝濡傛灉two閲岄潰鐨勫厓绱犱負絀猴紝鍒欏皢one閲岄潰鐨勫厓绱犱緷嬈″脊鍑哄茍鍘嬪叆two涓紝鍐嶄粠two寮瑰嚭涓涓厓绱犺繑鍥炪?br />   
   鐢⊿TL閲岄潰鐨剆tack妯℃嫙瀹炵幇queue鐨勪唬鐮佸涓嬶細
   1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <time.h>
  4 #include <stack>
  5 using std::stack;
  6 
  7 template<class T> class CQueue
  8 {
  9 public:
 10     CQueue()
 11     {
 12         nSize = 0;
 13     }
 14     
 15     void clear()
 16     {
 17         while (!one.empty())
 18         {
 19             one.pop();
 20         }
 21         while (!two.empty())
 22         {
 23             two.pop();
 24         }
 25     }
 26 
 27     void push(const T& t)
 28     {
 29         one.push(t);
 30         ++nSize;
 31     }
 32 
 33     void pop()
 34     {
 35         if (two.empty())
 36         {
 37             while (!one.empty())
 38             {
 39                 two.push(one.top());
 40                 one.pop();
 41             }
 42         }
 43         two.pop();
 44         --nSize;
 45     }
 46     
 47     T& front()
 48     {
 49         if (two.empty())
 50         {
 51             while (!one.empty())
 52             {
 53                 two.push(one.top());
 54                 one.pop();
 55             }
 56         }
 57         return two.top();
 58     }
 59     
 60     T& back()
 61     {
 62         return one.top();
 63     }
 64     
 65     bool empty()
 66     {
 67         return nSize == 0;
 68     }
 69     
 70 private:
 71     stack<T> one;
 72     stack<T> two;
 73     int nSize;
 74 };
 75 
 76 #define MAX 20
 77 
 78 int main()
 79 {
 80     CQueue<int> q;
 81     
 82     srand(time(NULL));
 83     for (int i = 0; i < MAX; ++i)
 84     {
 85         q.push(i);
 86         
 87         if (rand() % 2)
 88         {
 89             printf("front: %d\n", q.front());
 90             q.pop();
 91         }
 92     }
 93     
 94     while (!q.empty())
 95     {
 96         printf("front: %d\n", q.front());
 97         q.pop();
 98     }
 99     
100     return 0;
101 }
102 
   
涓や釜闃熷垪瀹炵幇涓涓爤
   瑕佹眰錛氬彧鑳戒嬌鐢ㄤ粠闃熷垪鐨勫熬閮ㄥ叆鍜屽ご閮ㄥ嚭錛屼互鍙婃祴璇曢槦鍒楁槸鍚︿負絀轟笁涓搷浣溿?br />   瀹炵幇鎬濊礬錛?br />      闃熷垪閲岄潰浣跨敤queue one 鍜?stack two銆?br />      榪涙爤鏃訛紝鏍規(guī)嵁褰撳墠鍏冪礌鏄叏閮ㄥ瓨鍌ㄥ湪鍝釜闃熷垪鑰岄夋嫨浠巓ne鎴栬卼wo鐨勫熬閮ㄨ繘鍏ャ?br />      鍑烘爤鏃訛紝鍋囪褰撳墠鍏冪礌閮藉瓨鍌ㄥ湪one閲岄潰錛屽垯涓嶆柇鍑洪槦鍒楋紝鐩村埌闃熷垪涓虹┖涔嬪墠鐨勬墍鏈夊厓绱犱竴嬈¤繘鍏ラ槦鍒梩wo錛岃宱ne閲岄潰鐨勬渶鍚庝竴涓厓绱?br />      浣滀負鏍堝脊鍑虹殑鍊艱繑鍥炪?br />      瀵逛簬褰撳墠鍏冪礌鏄瓨鍌ㄥ湪鍝釜闃熷垪閲岄潰錛屽彲浠ヨ緗彉閲忔爣璁幫紝鍒濆鍖栨椂鍊欏瓨鍌ㄥ湪one閲岄潰錛屾搷浣滀竴嬈★紝鐢變簬鍏冪礌瑕佸掕漿錛屽垯瀛樺偍浣嶇疆浼氬彉
      涓嬈°?br />      
      鐢⊿TL閲岄潰鐨剄ueue妯℃嫙瀹炵幇鐨剆tack浠g爜濡備笅錛?br />   1 #include <stdio.h>
  2 #include <queue>
  3 using std::queue;
  4 
  5 template<class T> class CStack
  6 {
  7 public:
  8     CStack()
  9     {
 10         nSize = 0;
 11         nTime = 1;
 12     }
 13 
 14     void clear()
 15     {
 16         while (!one.empty())
 17         {
 18             one.pop();
 19         }
 20         while (!two.empty())
 21         {
 22             two.pop();
 23         }
 24     }
 25 
 26     void push(const T& t)
 27     {
 28         if (nTime % 2)
 29         {
 30             one.push(t);
 31         }
 32         else
 33         {
 34             two.push(t);
 35         }
 36         ++nSize;
 37     }
 38 
 39     void pop()
 40     {
 41         if (nTime % 2)
 42         {
 43             while (!one.empty())
 44             {
 45                 T t = one.front();
 46                 one.pop();
 47                 if (!one.empty())
 48                 {
 49                     two.push(t);
 50                 }
 51             }
 52         }
 53         else
 54         {
 55             while (!two.empty())
 56             {
 57                 T t = two.front();
 58                 two.pop();
 59                 if (!two.empty())
 60                 {
 61                     one.push(t);
 62                 }
 63             }
 64         }
 65 
 66         nTime = (nTime + 1) % 2;
 67         --nSize;
 68     }
 69 
 70     T& top()
 71     {
 72         if (nTime % 2)
 73         {
 74             while (!one.empty())
 75             {
 76                 T t = one.front();
 77                 one.pop();
 78                 if (!one.empty())
 79                 {
 80                     two.push(t);
 81                 }
 82                 else
 83                 {
 84                     two.push(t);
 85                     nTime = (nTime + 1) % 2;
 86                     return two.back();
 87                 }
 88             }
 89         }
 90         else
 91         {
 92             while (!two.empty())
 93             {
 94                 T t = two.front();
 95                 two.pop();
 96                 if (!two.empty())
 97                 {
 98                     one.push(t);
 99                 }
100                 else
101                 {
102                     one.push(t);
103                     nTime = (nTime + 1) % 2;
104                     return one.back();
105                 }
106             }
107         }
108     }
109 
110     bool empty()
111     {
112         return nSize == 0;
113     }
114 
115 private:
116     queue<T> one;
117     queue<T> two;
118     int nSize;
119     int nTime;
120 };
121 
122 #define MAX 20
123 
124 int main()
125 {
126     CStack<int> stack;
127 
128     for (int i = 0; i < MAX; ++i)
129     {
130         stack.push(i);
131     }
132 
133     while (!stack.empty())
134     {
135         printf("top: %d\n", stack.top());
136         stack.pop();
137     }
138     
139     return 0;
140 }
141 


yx 2012-03-11 20:30 鍙戣〃璇勮
]]>
POJ鐧劇粌 - 2797:鏈鐭墠緙(鍙互浣跨敤瀛楀吀鏍戝仛)http://www.shnenglu.com/csu-yx-2013/archive/2011/11/22/160711.htmlyxyxTue, 22 Nov 2011 07:11:00 GMThttp://www.shnenglu.com/csu-yx-2013/archive/2011/11/22/160711.htmlhttp://www.shnenglu.com/csu-yx-2013/comments/160711.htmlhttp://www.shnenglu.com/csu-yx-2013/archive/2011/11/22/160711.html#Feedback0http://www.shnenglu.com/csu-yx-2013/comments/commentRss/160711.htmlhttp://www.shnenglu.com/csu-yx-2013/services/trackbacks/160711.htmlhttp://poj.grids.cn/practice/2797/

榪欓涔嶇湅涔嬩笅紜疄娌′粈涔堟濊礬,鍚庨潰緇堜簬鏄庣櫧棰樻剰浜?鐒跺悗紿佺劧鎯沖埌鍙互鐢ㄥ瓧鍏告爲鍋?閫熷害褰撶劧浼氭槸闈炲父蹇殑...
浣嗘槸鍏跺疄榪樻湁涓縐嶆洿綆鍗曠殑鏂規(guī)硶,閭e氨鏄鎵鏈夊瓧絎︿覆鎺掑簭涔嬪悗,姣忎釜瀛楃涓茬殑鍓嶇紑闀垮害鍏跺疄灝辨槸鐢卞叾鍓嶄竴涓拰鍚庝竴涓瓧絎︿覆鍏卞悓鍐沖畾,
nLen = max(nOne, nTwo), nOne 鍜?nTwo灝卞垎鍒唬琛ㄥ綋鍓嶅瓧絎︿覆鍜屽墠鍚庡瓧絎︿覆鍏憡閮ㄥ垎鐨勯暱搴?1鍚庣殑鍊?..
浠g爜鍐欏嚭鏉ュ啓闈炲父綆鍗?..鍚屽榪欐牱瀹炵幇浜嗕笅,涔熻交鏉捐繃浜?..

鐒跺悗鎴戝氨杈涜嫤鐨勫啓浜嗕竴媯靛瓧鍏告爲...鍙兘鎴戠殑鍐欐硶涓嶆槸寰堟爣鍑?鍥犱負鎴戞病鍙傝冧粈涔堟ā鏉?鑷繁紜兂鍑烘潵鎬庝箞鍐欑殑...
鎴戠殑鎯蟲硶鏄紑涓涓潤鎬佸ぇ鏁扮粍,絎竴涓粨鐐逛綔涓烘牴,涓嶅瓨鍌ㄦ暟鎹?浠庣浜屼釜緇撶偣寮濮嬩綔涓鴻嚜鐢辯┖闂村垎閰?..
鍏跺疄,灝辨槸瀵?6棰楀瓧鍏告爲铏氭嫙浜嗕釜鏃犳暟鎹殑鏍圭粨鐐?..
浣跨敤浜嗚櫄鎷熺殑鏍圭粨鐐瑰悗,浠g爜姣旂敤26涓牴緇撶偣綆媧佸緢澶?..
鍒氬紑濮嬫垜灝卞亣璁?-26鍙風粨鐐瑰垎鍒負a-z,浣滀負26棰楁爲鐨勬牴,
鑰屼笖涓?6涓粨鐐圭殑浣嶇疆鎴戠敤鐨勬槸绱㈠紩,娌$敤鎸囬拡,鍚庨潰鎹㈡垚浜嗘寚閽?浠g爜鐪嬭搗鏉ユ洿鑸掓湇浜?..


#include <stdio.h>
#include <string.h>
#define LETTER_NUM 26
#define WORD_LEN_MAX 25
#define WORD_NUM_MAX 1030
#define NODE_MAX (WORD_LEN_MAX * WORD_NUM_MAX + 10)
struct WORD_TREE
{
    char ch;
    WORD_TREE* next[LETTER_NUM];
    int nTime;
};
WORD_TREE tree[NODE_MAX];
WORD_TREE* pFreeNode = tree + 1;//絎竴涓粨鐐逛綔涓哄ご緇撶偣,涓嶅瓨鍌ㄦ暟鎹?/div>
char szWords[WORD_NUM_MAX][WORD_LEN_MAX];
void AddToTree(char* pszStr)
{
    WORD_TREE* pTree = tree;
    while (*pszStr && pTree->next[*pszStr - 'a'])
    {
        pTree = pTree->next[*pszStr - 'a'];
        pTree->nTime++;
        ++pszStr;
    }
    while (*pszStr)
    {
        pFreeNode->ch = *pszStr;
        pFreeNode->nTime++;
        pTree->next[*pszStr - 'a'] = pFreeNode;
        pTree = pFreeNode;
        ++pszStr;
        ++pFreeNode;
    }
}
int FindPrefix(char* pszStr)
{
    WORD_TREE* pTree = tree;
    int nLen = 0;
    while (*pszStr)
    {
        ++nLen;
        pTree = pTree->next[*pszStr - 'a'];
        if (pTree->nTime <= 1)
        {
            break;
        }
        ++pszStr;
    }
    return nLen;
}
int main()
{
    int nCount = 0;
    while (scanf("%s", szWords[nCount]) != EOF)
    {
        AddToTree(szWords[nCount]);
        nCount++;
    }
    for (int i = 0; i < nCount; ++i)
    {
        int nLen = FindPrefix(szWords[i]);
        printf("%s ", szWords[i]);
        for (int j = 0; j < nLen; ++j)
        {
            putchar(szWords[i][j]);
        }
        putchar('\n');
    }
    return 0;
}


yx 2011-11-22 15:11 鍙戣〃璇勮
]]> 无码AV波多野结衣久久| 狠狠色丁香婷综合久久| 久久99国产精品99久久| 亚洲欧美日韩精品久久亚洲区| 久久综合久久自在自线精品自 | 久久九九久精品国产免费直播| 久久国产色av免费看| 久久99精品国产99久久6| 久久精品国产亚洲av水果派 | 午夜福利91久久福利| 99久久精品国内| 日本强好片久久久久久AAA| 亚洲а∨天堂久久精品9966| 91精品久久久久久无码| AV无码久久久久不卡网站下载| 青青草原综合久久大伊人| 国产亚州精品女人久久久久久 | 久久久久免费看成人影片| 伊人热热久久原色播放www| 国内精品久久久久久久久| 久久99国产精品久久久| 精品久久久久香蕉网| 囯产精品久久久久久久久蜜桃| 亚洲精品综合久久| 久久午夜无码鲁丝片午夜精品| 久久亚洲国产中v天仙www | 2021少妇久久久久久久久久| 色婷婷综合久久久中文字幕| 久久婷婷色综合一区二区| 亚洲欧美成人久久综合中文网 | 一本色道久久88综合日韩精品 | 一级做a爰片久久毛片看看| 久久久久人妻精品一区三寸蜜桃| 国产福利电影一区二区三区久久久久成人精品综合 | 久久久久亚洲AV无码去区首| 国内精品久久久久影院网站 | 一本久久a久久精品综合香蕉| 婷婷久久精品国产| 婷婷久久综合九色综合九七| 久久综合色老色| 亚洲色大成网站www久久九|