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

ACM___________________________

______________白白の屋
posts - 182, comments - 102, trackbacks - 0, articles - 0
<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用鏈接

留言簿(24)

隨筆分類(332)

隨筆檔案(182)

FRIENDS

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋    

題目地址 :

http://poj.org/problem?id=2528

題目描述:

Mayor's posters
Time Limit: 1000MSMemory Limit: 65536K
Total Submissions: 15722Accepted: 4444

Description

The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city council has finally decided to build an electoral wall for placing the posters and introduce the following rules: 
  • Every candidate can place exactly one poster on the wall. 
  • All posters are of the same height equal to the height of the wall; the width of a poster can be any integer number of bytes (byte is the unit of length in Bytetown). 
  • The wall is divided into segments and the width of each segment is one byte. 
  • Each poster must completely cover a contiguous number of wall segments.

They have built a wall 10000000 bytes long (such that there is enough place for all candidates). When the electoral campaign was restarted, the candidates were placing their posters on the wall and their posters differed widely in width. Moreover, the candidates started placing their posters on wall segments already occupied by other posters. Everyone in Bytetown was curious whose posters will be visible (entirely or in part) on the last day before elections. 
Your task is to find the number of visible posters when all the posters are placed given the information about posters' size, their place and order of placement on the electoral wall. 

Input

The first line of input contains a number c giving the number of cases that follow. The first line of data for a single case contains number 1 <= n <= 10000. The subsequent n lines describe the posters in the order in which they were placed. The i-th line among the n lines contains two integer numbers li and ri which are the number of the wall segment occupied by the left end and the right end of the i-th poster, respectively. We know that for each 1 <= i <= n, 1 <= li <= ri <= 10000000. After the i-th poster is placed, it entirely covers all wall segments numbered li, li+1 ,... , ri.

Output

For each input data set print the number of visible posters after all the posters are placed. 

The picture below illustrates the case of the sample input. 

Sample Input

1
5
1 4
2 6
8 10
3 4
7 10

Sample Output

4

 題目分析 :

代碼
/*
   線段樹 +  離散化
    
   好像記得暑假做 樹狀數組的時候 做過一個離散化的題目, 當時是用2分查詢
   離散節點標記的, 速度還是可以的, 不過那時對離散化也沒有什么概念, 大
   概是沒怎么接觸, 今天做了這道題目的時候,  也算是明白了 離散化 的基本
   意思,因為 題目的 數據范圍很大 , 1- 10000000,直接線段樹的話, 先不說
   內存會不會爆, 這么大的范圍估計也是 TLE了. 
   仔細讀題, 可以看到  1<= N <= 10000, 也就是說 最多只有 10000個點, 如果
   每個點都不同, 那么最多也只有 20000 個數據, 那么離散后的 范圍就相當小;
   
   離散化 的大概思路 :   比如說給你一組 數據 1 4 1000 100000,  如果直接
                         開線段, 顯然是浪費, 那么我們只要 進行 映射 :
                                1    1  
                                4    2
                             1000    3
                           100000    4
                         接下來 我們只要對 1 2 3 4 建立線段樹就行了 只需要
                         [1,4]的區間     
*/

/*
Mail to   : miyubai@gamil.com
Link      : 
http://www.cnblogs.com/MiYu  || http://www.shnenglu.com/MiYu
Author By : MiYu
Test      : 1
Complier  : g++ mingw32-3.4.2
Program   : 2528
Doc Name  : Mayor's posters
*/
//#pragma warning( disable:4789 )
#include <iostream>
#include 
<fstream>
#include 
<sstream>
#include 
<algorithm>
#include 
<string>
#include 
<set>
#include 
<map>
#include 
<utility>
#include 
<queue>
#include 
<stack>
#include 
<list>
#include 
<vector>
#include 
<cstdio>
#include 
<cstdlib>
#include 
<cstring>
#include 
<cmath>
#include 
<ctime>
using namespace std;
int T, N, x, y;
map 
< intint > mp;
set <int> st;
map
<int,int>::iterator beg, end;
struct segtree {
       
int left, right,cov;
       
int mid () { return (left+right)>>1; }
}seg[
80010];
struct P {  //節點數據 
       int left, right;
}pp[
10010];
void creat ( int x, int y, int rt = 1 ) {
     seg[rt].left 
= x;
     seg[rt].right 
= y;
     seg[rt].cov 
= 0;
     
if ( x == y ) return ;
     
int mid = seg[rt].mid();
     creat ( x, mid, rt 
<< 1 );
     creat ( mid 
+ 1, y, rt << 1 | 1 );     
}
void insert ( int x, int y, int flag, int rt = 1 ) {
     
//如果線段被覆蓋, 直接標記, 返回 
    if ( seg[rt].left == x && seg[rt].right == y ) {
        seg[rt].cov 
= flag;
        
return;   
    }    
    
int LL = rt << 1, RR = rt << 1 | 1, mid = seg[rt].mid();
    
if ( seg[rt].cov != -1 ) {  
       
//如果線段是被覆蓋的 , 標記下傳, 同時自身標記-1,表示有多個標記 
        seg[LL].cov = seg[RR].cov = seg[rt].cov;
        seg[rt].cov 
= -1;   
    }
    
//遞歸 插入 
    if ( y <= mid ) insert ( x, y, flag, LL );
    
else if ( x > mid ) insert ( x, y, flag, RR );
    
else {
          insert ( x, mid, flag, LL );
          insert ( mid 
+ 1, y, flag, RR );     
    }
}
void query ( int x, int y, int rt = 1 ) {
    
// 線段被覆蓋 , 將覆蓋標記 放入 set 
    if ( seg[rt].cov != -1 && seg[rt].left == x && seg[rt].right == y ) {
        st.insert ( seg[rt].cov );
        
return ;   
    }
else {//遞歸查詢 
          int LL = rt << 1, RR = rt << 1 | 1, mid = seg[rt].mid();
          
if ( y <= mid ) query ( x, y, rt << 1 ); 
          
else if ( x > mid ) query ( x, y, rt << 1 | 1 );
          
else {
                query ( x, mid, LL );
                query ( mid 
+ 1, y, RR );     
          }
    }
}
void print () {
     
for ( set<int>::iterator it = st.begin(); it != st.end(); ++ it )
           cout 
<< *it << endl;     
}
int main ()
{
    scanf ( 
"%d"&T );
    creat ( 
120010 );
    
while ( T -- ) {
           mp.clear();
           st.clear (); 
           scanf ( 
"%d"&N );
           
for ( int i = 1; i <= N; ++ i ) {
                scanf ( 
"%d%d"&pp[i].left, &pp[i].right );
                 
//map 去重 
                mp[pp[i].left] = 88; mp[pp[i].right] = 88;    
           }      
           beg 
= mp.begin(), end = mp.end();
           
//因為map 已經自動排序了,所以直接從 1 --> N 開始標記, 離散化 
           for ( int i = 1;beg != end; ++ beg, ++ i ) {         
                beg
->second = i;  
           }
           
//因為線段樹已經建立好了, 所以沒必要每次都重建一次, 只要插入一條
           
//覆蓋所有區間的 底板 就行了 
           insert ( 1, N * 20 );
           
for ( int i = 1; i <= N; ++ i ) {
                
//用離散后的標記 插入 線段 
                insert ( mp[pp[i].left], mp[pp[i].right], i );   
           }
           query ( 
1, N * 2 );
           
//print();
           int cnt = st.size();
           
if ( *st.begin() == 0 ) -- cnt; 
           printf ( 
"%d\n", cnt );
    }

    
return 0;
}

 

Feedback

# re: PKU 2528 POJ 2528 Mayor's posters ( 線段樹+離散化 ) ACM 2528 IN PKU  回復  更多評論   

2011-10-19 22:34 by wjjay
3
1 10
1 5
7 10
請問這組數據在你程序里跑出來的結果跟你手算的一樣么?
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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久久香蕉国产日韩欧美9色| 一区二区日韩精品| 国内精品模特av私拍在线观看| 最新69国产成人精品视频免费| 欧美日本成人| 亚洲第一精品电影| 国产三级精品在线不卡| 99视频精品在线| 亚洲国产精品成人一区二区| 午夜日韩在线观看| 欧美一级电影久久| 国产精品社区| 亚洲午夜精品久久久久久app| 亚洲人成绝费网站色www| 欧美影院精品一区| 久久久久久一区二区| 国产亚洲二区| 久久久久久久97| 毛片一区二区三区| 亚洲国产婷婷香蕉久久久久久99 | 最新中文字幕亚洲| 免费成人在线视频网站| 亚洲高清视频一区| 99国产精品久久久| 欧美色图首页| 欧美一区二区视频网站| 欧美 日韩 国产一区二区在线视频| 国产一区二区三区高清播放| 久久久久久一区| 最新日韩欧美| 久久三级视频| 一区二区三区四区五区视频| 国产乱码精品一区二区三区不卡| 欧美在线亚洲综合一区| 欧美成人一区在线| 亚洲淫性视频| 亚洲精品一区二区在线观看| 国产精品免费小视频| 久久香蕉国产线看观看av| 在线视频欧美日韩精品| 女生裸体视频一区二区三区| 亚洲在线一区| 亚洲一区二区在线视频| 亚洲国产视频直播| 一区二区三区自拍| 国产精品资源在线观看| 欧美日韩三区| 欧美日韩 国产精品| 欧美sm视频| 欧美成人精品| 欧美成人性网| 欧美sm极限捆绑bd| 久久中文久久字幕| 免费观看成人www动漫视频| 久久国产综合精品| 久久夜色精品国产欧美乱极品| 亚洲男女自偷自拍图片另类| 亚洲自啪免费| 久久精品视频导航| 久久亚洲综合色一区二区三区| 久久精品官网| 欧美高清不卡| 国产精品人人爽人人做我的可爱| 国产精品一区二区三区观看| 国产婷婷色一区二区三区在线| 国产一区欧美日韩| 亚洲日本va午夜在线影院| 亚洲免费av电影| 香港久久久电影| 欧美成人免费在线视频| 亚洲国产精品尤物yw在线观看 | 欧美视频一区在线| 国产一区二区无遮挡| 亚洲欧洲一区二区在线播放| 亚洲永久精品大片| 免费日韩av片| 欧美一区二区免费视频| 欧美激情在线播放| 国产丝袜一区二区| 午夜精品久久久久久久白皮肤| 久久亚洲私人国产精品va| 国产精品99久久久久久宅男 | 99国产精品| 蜜桃av一区二区三区| 一本色道久久加勒比精品| 欧美aⅴ99久久黑人专区| 国内精品免费午夜毛片| 午夜精品视频在线观看| 亚洲欧洲精品一区| 欧美精品色网| 中文无字幕一区二区三区| 欧美黄色成人网| 另类国产ts人妖高潮视频| 在线看片成人| 美女在线一区二区| 欧美a级理论片| 制服诱惑一区二区| 亚洲午夜成aⅴ人片| 国产精品日本欧美一区二区三区| 亚洲午夜免费视频| 亚洲综合色噜噜狠狠| 国产一区二区三区高清| 欧美大片在线看免费观看| 久久综合久久综合这里只有精品| 亚洲成色最大综合在线| 日韩网站在线看片你懂的| 欧美视频日韩视频在线观看| 欧美在线免费观看视频| 久久偷窥视频| 欧美一级黄色录像| 欧美大片免费| 久久久人成影片一区二区三区| 久久不射网站| 亚洲在线一区二区| 久久久久综合网| 欧美怡红院视频一区二区三区| 女同性一区二区三区人了人一| 亚洲欧美另类在线| 欧美日韩情趣电影| 女女同性精品视频| 伊人色综合久久天天五月婷| 中日韩高清电影网| 一区二区成人精品| 狼人社综合社区| 毛片av中文字幕一区二区| 国产精品一区二区你懂得 | 亚洲国产欧美国产综合一区 | 亚洲区欧美区| 亚洲精品国产品国语在线app| 欧美综合激情网| 久久人人97超碰国产公开结果| 国产精品美女主播在线观看纯欲| 亚洲精选久久| 亚洲午夜免费视频| 国产精品欧美一区喷水| 亚洲一区二区高清| 欧美一区二区三区免费大片| 国产日韩精品视频一区| 午夜欧美电影在线观看| 美女在线一区二区| 亚洲精品日韩在线观看| 欧美日韩一区二区精品| 亚洲一区视频在线| 鲁大师成人一区二区三区| 亚洲第一免费播放区| 欧美日韩高清在线观看| 亚洲一区视频在线观看视频| 麻豆av一区二区三区久久| 亚洲狼人综合| 国内视频一区| 欧美日韩三级一区二区| 久久五月天婷婷| 亚洲一二三区在线| 亚洲激情啪啪| 麻豆精品国产91久久久久久| 亚洲一区二区在线看| 亚洲国产精品一区二区第一页| 欧美视频日韩| 欧美视频福利| 欧美日韩国产综合久久| 欧美aⅴ99久久黑人专区| 亚洲综合视频网| 一区二区三区国产在线观看| 亚洲国产高清自拍| 欧美凹凸一区二区三区视频| 欧美一区2区三区4区公司二百| 亚洲一区二区三区乱码aⅴ| 亚洲精品视频在线观看网站| 国产一区二区三区丝袜 | 国产精品亚洲一区| 欧美性猛交一区二区三区精品| 欧美日韩三级一区二区| 欧美日韩午夜剧场| 欧美日韩亚洲在线| 国产精品国产三级国产普通话蜜臀 | 久久精品首页| 久久综合九色九九| 欧美激情亚洲另类| 欧美日韩一区二区三区视频| 欧美日韩精品系列| 国产精品专区h在线观看| 韩国精品主播一区二区在线观看| 一区二区在线视频| 一本色道婷婷久久欧美| 久久爱另类一区二区小说| 欧美1区免费| 夜夜嗨av色一区二区不卡| 欧美诱惑福利视频| 欧美日本精品一区二区三区|