• <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>

            A Za, A Za, Fighting...

            堅(jiān)信:勤能補(bǔ)拙

            PKU 2777 Count Color

            問(wèn)題:
            http://acm.pku.edu.cn/JudgeOnline/problem?id=2777

            思路:
            線段樹(shù)的典型題

            參考:
            http://blog.csdn.net/xiaofengsheng/archive/2009/03/03/3953265.aspx

            代碼:
              1 #include<stdio.h>
              2 #include<stdlib.h>
              3 #include<string.h>
              4 #define MAX_N 100001
              5 #define MAX_T 31
              6 #define LEFT(i) (i<<1)
              7 #define RIGHT(i) ((i<<1)+1)
              8 int L, T, O;
              9 struct Node {
             10     int left, right;
             11     int color;
             12 };
             13 struct Node nodes[MAX_N*3];
             14 int rt, visited[MAX_T];
             15 
             16 void
             17 build(int begin, int end, int step)
             18 {
             19     int mid;
             20     nodes[step].left = begin;
             21     nodes[step].right = end;
             22     nodes[step].color = 1;
             23     if(begin == end)
             24         return;
             25     mid = (begin+end)>>1;
             26     build(begin, mid, LEFT(step));
             27     build(mid+1, end, RIGHT(step));
             28 }
             29 
             30 void
             31 insert(int begin, int end, int color, int step)
             32 {
             33     int mid;
             34     if(nodes[step].left==begin && nodes[step].right==end) {
             35         nodes[step].color = color;
             36         return;
             37     };
             38     if(nodes[step].color != -1) {
             39         nodes[LEFT(step)].color = nodes[RIGHT(step)].color = nodes[step].color;
             40         nodes[step].color = -1/* mixed color */
             41     }
             42     mid = (nodes[step].left+nodes[step].right)>>1;
             43     if(begin > mid) 
             44         insert(begin, end, color, RIGHT(step));
             45     else if(end<=mid)
             46         insert(begin, end, color, LEFT(step));
             47     else {
             48         insert(begin, mid, color, LEFT(step));
             49         insert(mid+1, end, color, RIGHT(step));
             50     }
             51 }
             52 
             53 void
             54 calculate(int begin, int end, int step)
             55 {
             56     if(nodes[step].color != -1) {
             57         if(!visited[nodes[step].color]) {
             58             visited[nodes[step].color] = 1;
             59             ++rt;
             60         }
             61         return;
             62     }
             63     int mid = (nodes[step].left+nodes[step].right)>>1;
             64     if(mid < begin)
             65         calculate(begin, end, RIGHT(step));
             66     else if(mid >= end)
             67         calculate(begin, end, LEFT(step));
             68     else {
             69         calculate(begin, mid, LEFT(step));
             70         calculate(mid+1, end, RIGHT(step));
             71     }
             72 }
             73 
             74 int
             75 main(int argc, char **argv)
             76 {
             77     int i, a, b, c;
             78     char ops[2];
             79     while(scanf("%d %d %d"&L, &T, &O) != EOF) {
             80         build(1, L, 1);
             81         for(i=1; i<=O; i++) {
             82             scanf("%s", ops);
             83             if(ops[0== 'C') {
             84                 scanf("%d %d %d"&a, &b, &c);
             85                 if(a <= b)
             86                     insert(a, b, c, 1);
             87                 else
             88                     insert(b, a, c, 1);
             89             } else if(ops[0== 'P') {
             90                 scanf("%d %d"&a, &b);
             91                 rt = 0;
             92                 memset(visited, 0sizeof(visited));
             93                 if(a <= b)
             94                     calculate(a, b, 1);
             95                 else
             96                     calculate(b, a, 1);
             97                 printf("%d\n", rt);
             98             }
             99         }
            100     }
            101 }

            posted on 2010-09-16 10:57 simplyzhao 閱讀(256) 評(píng)論(0)  編輯 收藏 引用 所屬分類: E_數(shù)據(jù)結(jié)構(gòu)

            導(dǎo)航

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            統(tǒng)計(jì)

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            亚洲va中文字幕无码久久| 久久精品aⅴ无码中文字字幕不卡| 亚洲?V乱码久久精品蜜桃| 一本大道久久东京热无码AV| 久久久www免费人成精品| 久久久久成人精品无码中文字幕| AV色综合久久天堂AV色综合在| 久久久无码精品亚洲日韩按摩 | 久久中文字幕视频、最近更新 | 久久精品夜色噜噜亚洲A∨| 无码乱码观看精品久久| 欧美一区二区三区久久综合| 一本久久久久久久| 国产A三级久久精品| 91亚洲国产成人久久精品网址| 亚洲国产成人精品91久久久 | 亚洲日本va午夜中文字幕久久| 日韩人妻无码一区二区三区久久| 91精品国产91热久久久久福利 | 久久久中文字幕| 久久99这里只有精品国产| 四虎国产精品免费久久久| 久久综合亚洲色HEZYO社区| 国产成人精品久久一区二区三区av | 超级碰碰碰碰97久久久久| 91精品国产高清久久久久久io| 伊人色综合九久久天天蜜桃| 久久久九九有精品国产| 青青草原精品99久久精品66| 久久亚洲国产成人精品无码区| 精品免费tv久久久久久久| 久久青青草原精品国产| 亚洲精品美女久久久久99| yy6080久久| 久久人人爽人人爽人人爽 | 久久天天躁狠狠躁夜夜avapp| 久久996热精品xxxx| 狠狠色婷婷综合天天久久丁香| 精品无码久久久久久尤物| 久久人爽人人爽人人片AV| 日韩久久久久久中文人妻|