<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      書山有徑勤為路>>>>>>>>

      <<<<<<<<學海無涯苦作舟!

      線段樹重溫——刷墻

      描述

      在一面很長的墻壁上,工人們用不同的油漆去刷墻,然而可能有些地方刷過以后覺得不好看,他們會重新刷一下。有些部分因為重復刷了很多次覆蓋了很多層油漆,toshio很好奇那些地方被刷過多少種顏色的油漆。輸入若干行輸入,每行兩個數字B[i],E[i](0<=B[i]<=E[i]<=200000)表示這次刷的墻壁是哪一段(假設每次刷的時候油漆顏色都和之前的不同),以0 0結束
      又若干行輸入,每行兩個數字begin[i],end[i](0<=begin[i]<=end[i]<=200000)表示toshio詢問的段,以0 0結束輸出對于每個toshio的詢問輸出(end[i]-begin[i]+1)行,表示對應詢問段的每個點被多少種顏色的油漆覆蓋過。
      樣例輸入

      1 20

      5 10

      10 20

      0 0

      4 6

      10 11

      0 0
      樣例輸出

      2

      2

      3

      關鍵點1:

      在這里要提醒大家一下,我們要開開的結構體數目得

      是線段的最大長度的至少3倍,一般開到4倍。注意一

      下這點就行了,不然的話,你連輸入就過不了,更別

      說得到正確的結果了。

      關鍵點2:

      另外,線段樹是以段為單位的,這個怎么理解呢?

       

      if(Tree[level].left==left && Tree[level].right==right)  

      Tree[level].icount += 1;

      這句話來說,假如left=1, right=5時,

      那么,從1到5的這個段上的1,2,3,4,5中的icount值

      都是作了Tree[level].icount += 1;這個動作。

      View Code
      #include<iostream>
      #include<cstdio>
      using namespace std;
      struct Node
      {
          int left;
          int right;
          int mid;
          int icount;
      };
      Node Tree[2000000];
      void BuildTree(int level, int left, int right)
      {
          Tree[level].icount=0;
          Tree[level].left = left;
          Tree[level].right = right;
          Tree[level].mid = (left+right)/2;
          if(left==right)
              return;
          else
          {
              BuildTree(2*level, left, Tree[level].mid);  ///建立左子結點
              BuildTree(2*level+1, Tree[level].mid+1, right);   ///建立右子結點
          }
      }
      void Insert(int level, int left, int right)  //統計經過每個點的次數
      {
          if(Tree[level].left==left && Tree[level].right==right)  //if語句是在區間吻合時起作用的,這時恰好要是結束的時候。
              Tree[level].icount += 1;
          else if(left > Tree[level].mid)  //往右邊進行搜索(這是被搜索的區間完全落在右邊的情況)
              Insert(2*level+1, left, right);
          else if(right <= Tree[level].mid)  //往左邊進行搜索(這是被搜索的區間完全落在左邊的情況)
              Insert(2*level, left, right);
          else  //往兩邊進行搜索(這是被搜索的區間落在兩邊的情況,所以要向兩邊同時進行搜索)
          {
              Insert(2*level, left, Tree[level].mid);
              Insert(2*level+1, Tree[level].mid+1, right);
          }
      }
      int Find(int level, int target)  //對不同的區間進行遍歷查詢
      {
          if(target==Tree[level].left && target==Tree[level].right)
              return Tree[level].icount;
          else if(target > Tree[level].mid)
              return Tree[level].icount+Find(2*level+1, target);
          else if(target <= Tree[level].mid)
              return Tree[level].icount+Find(2*level, target);
      }
      int main()
      {
          int left, right;
          BuildTree(1, 0, 200000);
          while(cin>>left>>right && (left+right))
              Insert(1, left, right);
          while(cin>>left>>right && (left+right))
              for(int i=left; i<=right; i++)
                  cout<<Find(1, i)<<endl;
          return 0;
      }

       

       

       

      posted on 2011-10-01 14:45  More study needed.  閱讀(407)  評論(0)    收藏  舉報

      導航

      書山有徑勤為路>>>>>>>>

      <<<<<<<<學海無涯苦作舟!

      主站蜘蛛池模板: 亚洲精品久久麻豆蜜桃| 亚亚洲视频一区二区三区| 性男女做视频观看网站| 亚洲欧美中文字幕5发布| 日韩高清国产中文字幕| 亚洲色大成网站www永久一区| 国产日韩av二区三区| 欧美性大战xxxxx久久久| 亚洲精品漫画一二三区| 亚洲人成电影网站色mp4| 成人片黄网站色大片免费| 国产精品一区在线蜜臀| 国产精品爆乳在线播放第一人称| 亚洲综合伊人久久综合| 国产精品人妻久久ai换脸| 国产欧美在线观看不卡| 民丰县| 亚洲av第三区国产精品| 亚洲VA中文字幕无码久久| 亚洲岛国成人免费av| 人妻激情一区二区三区四区| 国产精品日韩av在线播放| 一本高清码二区三区不卡| 日韩少妇人妻vs中文字幕| 撕开奶罩揉吮奶头视频| 中文字幕日韩区二区三区| 人妻少妇无码精品专区| 亚洲精品美女久久久久99| 久久免费偷拍视频有没有| 国产熟睡乱子伦视频在线播放| 内乡县| 国产女人在线视频| 天天干天天色综合网| 美乳丰满人妻无码视频| 少妇人妻av毛片在线看| 最新永久免费AV无码网站| 日韩毛片在线视频x| 人妻一区二区三区人妻黄色| 久久无码中文字幕免费影院蜜桃| 亚洲 中文 欧美 日韩 在线| 国产精品一区免费在线看|