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

ACM___________________________

______________白白の屋
posts - 182, comments - 102, trackbacks - 0, articles - 0
<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

常用鏈接

留言簿(24)

隨筆分類(332)

隨筆檔案(182)

FRIENDS

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜


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

 

題目地址:

 http://acm.hdu.edu.cn/showproblem.php?pid=2795

題目描述:

Billboard

Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 733    Accepted Submission(s): 340


Problem Description
At the entrance to the university, there is a huge rectangular billboard of size h*w (h is its height and w is its width). The board is the place where all possible announcements are posted: nearest programming competitions, changes in the dining room menu, and other important information.

On September 1, the billboard was empty. One by one, the announcements started being put on the billboard.

Each announcement is a stripe of paper of unit height. More specifically, the i-th announcement is a rectangle of size 1 * wi.

When someone puts a new announcement on the billboard, she would always choose the topmost possible position for the announcement. Among all possible topmost positions she would always choose the leftmost one.

If there is no valid location for a new announcement, it is not put on the billboard (that's why some programming contests have no participants from this university).

Given the sizes of the billboard and the announcements, your task is to find the numbers of rows in which the announcements are placed.
 

Input
There are multiple cases (no more than 40 cases).

The first line of the input file contains three integer numbers, h, w, and n (1 <= h,w <= 10^9; 1 <= n <= 200,000) - the dimensions of the billboard and the number of announcements.

Each of the next n lines contains an integer number wi (1 <= wi <= 10^9) - the width of i-th announcement.
 

Output
For each announcement (in the order they are given in the input file) output one number - the number of the row in which this announcement is placed. Rows are numbered from 1 to h, starting with the top row. If an announcement can't be put on the billboard, output "-1" for this announcement.
 

Sample Input
3 5 5 2 4 3 3 3
 

Sample Output
1 2 1 3 -1
 

 

一開始沒想明白怎么做 ,  仔細想了想,   再次 讀題后 發現 , n <= 200000;  也就是說  最多 也就 200000 條廣告 , 你就算每行貼一張 ,

最多也就貼到 200000 行,  所以  不要被  h <= 10^9  次方嚇到了  ,認為 線段樹開不了那么大的數組  . 只要開 200000 就可以了 .

 

其他的 沒什么 好說的 , 知道這個 就直接 暴 吧 ............將近 7000MS .=水過.................   g++提交 還華麗的 送出了 一次 TLE....

C++  水過了 ............

 

//    一直沒明白 為什么我的 代碼速度 那么 慢,  查詢后 更新 的時間是 2000MS 左右  , 我的 是 查詢 就更新了,

竟然要 將近 7000MS ? 非常 郁悶 ,  不信邪的 繼續 檢查 代碼, 在 瞪了 1哥小時后 , 忽然想到 : 把 cout 改成

printf 會怎樣?   結果 :  1640 MS  AC ..............鬼知道他的 數據量有多大..... cout 和 printf

竟然 差了 5000 MS 的時間 ...........無語

代碼如下 :

 

 /*

Coded By  : MiYu

Link      : http://www.cnblogs.com/MiYu  || http://m.shnenglu.com/MiYu

Author By : MiYu

Test      : 1

Program   : 2795

*/

//#pragma warning( disable:4789 )

#include <iostream>

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

using namespace std;


struct ADV {

       int left, right, val;

       int mid () { return ( left + right ) >> 1; }     

}adv[800000];

int N, W, H, w;

void creat ( int l, int r, int rt = 1 ){

     adv[rt].left = l;

     adv[rt].right = r;

     adv[rt].val = W;

     if ( l == r )

        return ;

     int mid = adv[rt].mid();

     creat ( l, mid, rt << 1 );

     creat ( mid + 1, r, ( rt << 1 ) + 1 );

}

void add ( int rt = 1, int wei = w ){

    if ( wei <= adv[rt].val ){

         if ( adv[rt].left == adv[rt].right ){

              adv[rt].val -= wei;

              //cout << adv[rt].left << endl;  //杯具的 地方

printf ( "%d\n", adv[rt].left ); 

              return ;     

         } else if ( adv[rt<<1].val >= wei ) {

                add ( rt << 1 );

                adv[rt].val = max ( adv[rt<<1].val, adv[(rt<<1)+1].val );     

         } else {

                add ( ( rt << 1 ) + 1 );

                adv[rt].val = max ( adv[rt<<1].val, adv[(rt<<1)+1].val );        

         }   

    } else {

           //cout << -1 << endl;      //杯具的地方

puts ( "-1" );   

    }   

}

inline bool scan_ud(int &num)

{

    char in;

    in=getchar();

    if(in==EOF) return false;

    while(in<'0'||in>'9') in=getchar();

    num=in-'0';

    while(in=getchar(),in>='0'&&in<='9'){

        num*=10,num+=in-'0';

    }

    return true;

}

int main ()

{

    while ( scan_ud (H)&&scan_ud (W)&&scan_ud (N) ) {

           if ( H > 200000 )

               H = 200010;

           creat ( 1, H );

           for ( int i = 1; i <= N; ++ i ) {

                scan_ud (w);

                add ( );     

           }      

    }

    return 0;

}

 

 

 

 

另 附上 傻崽  神牛 代碼 :

 

#include <iostream>

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

#define FF(i,a) for( int i = 0 ; i < a ; i ++ )

#define FOR(i,a,b) for( int i = a ; i < b ; i ++ )

#define LL(a) a<<1

#define RR(a) a<<1|1

template<class T> inline void checkmin(T &a,T b) {if(a < 0 || a > b)a = b;}

template<class T> inline void checkmax(T &a,T b) {if(a < b) a = b;}

using namespace std;

struct Node {

int val;

int idx;

friend bool operator < (Node a , Node b) {

if(a.val == b.val) {

return a.idx > b.idx;

}

return a.val < b.val;

}

}error;

 

struct Seg_Tree{

int left,right;

Node node;

int mid() {

return (left + right)>>1;

}

}tt[800000];

 

int n , h , m;

 

void build(int l,int r,int idx) {

tt[idx].left = l;

tt[idx].right = r;

tt[idx].node.idx = l;

tt[idx].node.val = h;

if(l == r) return ;

int mid = tt[idx].mid();

build(l,mid,LL(idx));

build(mid+1,r,RR(idx));

}

 

void update(int l,int r,int val,int idx) {

if(l <= tt[idx].left && r >= tt[idx].right) {

tt[idx].node.val += val;

return ;

}

int mid = tt[idx].mid();

if(l <= mid) update(l,r,val,LL(idx));

if(mid < r) update(l,r,val,RR(idx));

tt[idx].node = max(tt[LL(idx)].node,tt[RR(idx)].node);

}

 

Node query(int w,int idx) {

if(tt[idx].node.val < w) {

return error;

}

if(tt[idx].left == tt[idx].right) {

return tt[idx].node;

}

if(tt[LL(idx)].node.val >= w) {

return query(w,LL(idx));

} else {

return query(w,RR(idx));

}

}

 

int main() {

error.idx = -1;

while(scanf("%d%d%d",&n,&h,&m) == 3) {

checkmin(n,m);

build(1,n,1);

while(m --) {

int w;

scanf("%d",&w);

Node ret = query(w,1);

printf("%d\n",ret.idx);

if(ret.idx != -1) {

update(ret.idx,ret.idx,-w,1);

}

}

}

return 0;

 

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产在线麻豆精品观看| 99精品欧美一区二区三区综合在线| 一区二区三区欧美成人| 欧美国产日韩亚洲一区| 亚洲精品乱码| 亚洲电影免费观看高清完整版在线观看| 亚洲欧美中文在线视频| 国产视频一区二区在线观看| 久久精品国产69国产精品亚洲| 欧美在线播放高清精品| 激情婷婷亚洲| 亚洲精品久久久久久一区二区| 欧美日本三区| 午夜日韩av| 久久综合99re88久久爱| 99xxxx成人网| 亚洲欧美www| 亚洲黄页视频免费观看| 亚洲精品乱码久久久久| 国产精品日韩欧美一区| 久久精品国产精品亚洲精品| 久久久精品一区| av成人福利| 欧美中文字幕视频在线观看| 亚洲第一毛片| 99国产精品一区| 国产视频一区在线观看一区免费 | 欧美在线观看一区二区| 国产精品乱人伦中文| 久久―日本道色综合久久| 欧美成va人片在线观看| 亚洲欧美视频在线观看视频| 久久精品综合| 亚洲欧美日韩成人| 麻豆亚洲精品| 久久国产主播精品| 欧美日本韩国一区| 你懂的国产精品| 国产精品美女久久久久久久 | 久久成人在线| 欧美精品色网| 欧美a级在线| 国产日韩精品视频一区二区三区| 亚洲欧洲精品一区二区三区 | 免费av成人在线| 欧美亚洲视频一区二区| 欧美人成免费网站| 欧美成人精品| 精品成人一区二区三区| 亚洲在线一区| 午夜在线播放视频欧美| 欧美国产大片| 国产欧美日韩在线播放| 亚洲九九精品| 91久久精品国产91久久性色| 亚洲一区二区三区四区在线观看| 日韩一区二区精品视频| 蜜桃av综合| 美女国产一区| 极品少妇一区二区三区| 午夜在线视频观看日韩17c| 亚洲综合二区| 国产精品久久久久久久电影| 亚洲精品永久免费精品| 亚洲精品在线电影| 免费欧美网站| 亚洲电影天堂av| 亚洲国产精选| 欧美大秀在线观看| 亚洲激情校园春色| 99在线|亚洲一区二区| 欧美精品一区二| 亚洲美女视频网| 亚洲一区二区在线免费观看视频| 欧美日韩亚洲另类| 亚洲视屏在线播放| 欧美在线视频一区二区三区| 国产性猛交xxxx免费看久久| 欧美在线一级视频| 欧美bbbxxxxx| 一本久久综合亚洲鲁鲁五月天| 欧美黄色视屏| 亚洲一级高清| 久久综合999| 亚洲欧洲精品一区二区三区波多野1战4 | 91久久精品日日躁夜夜躁国产| 免费亚洲电影在线观看| 亚洲高清成人| 亚洲女性裸体视频| 韩国一区电影| 欧美久久久久久久久| 亚洲视频在线看| 久久久久国产精品www| 亚洲韩国精品一区| 欧美日韩亚洲一区二区三区| 亚洲女人天堂成人av在线| 久久久久女教师免费一区| 亚洲区中文字幕| 国产精品久久久999| 久久国内精品视频| 亚洲日韩成人| 久久久欧美一区二区| 亚洲精品国产日韩| 国产欧美日韩精品a在线观看| 久久精品夜夜夜夜久久| 99精品国产在热久久婷婷| 久久久久.com| 一本色道久久综合亚洲二区三区| 国产偷国产偷精品高清尤物| 欧美精品在线一区| 欧美中文字幕视频在线观看| 日韩亚洲欧美在线观看| 久热精品视频在线观看| 亚洲免费在线视频| 亚洲国产精品福利| 国产精品一级久久久| 欧美国产在线视频| 欧美一区二区三区在线看| 亚洲精品久久久久久久久久久久久 | 亚洲三级视频| 久久婷婷激情| 午夜激情一区| 99re热这里只有精品免费视频| 国产在线不卡视频| 国产精品国产三级国产普通话三级 | 狠狠v欧美v日韩v亚洲ⅴ| 欧美日韩精品一区视频| 看片网站欧美日韩| 亚洲欧美日韩国产一区二区三区| 亚洲激精日韩激精欧美精品| 美女网站在线免费欧美精品| 欧美在线网站| 午夜精品www| 亚洲午夜精品一区二区| 一本久道久久综合狠狠爱| 亚洲日韩视频| 亚洲精品欧美| 亚洲人成网站色ww在线| 亚洲国产精品999| 在线免费观看日本欧美| 一区二区视频免费在线观看| 国产日韩欧美在线一区| 国产亚洲综合性久久久影院| 国产亚洲精品久久久| 国产性色一区二区| 国产日产欧美精品| 国产一区二区精品丝袜| 国产视频在线观看一区| 国产在线观看91精品一区| 一区在线视频| 在线精品亚洲| 亚洲国产一区在线| 日韩视频在线观看| 一区二区三区欧美视频| 亚洲午夜伦理| 午夜精品一区二区三区在线视| 午夜性色一区二区三区免费视频| 欧美一区二区三区四区在线观看| 亚洲欧美制服另类日韩| 久久国产婷婷国产香蕉| 久久久999精品免费| 蜜桃久久精品乱码一区二区| 蜜月aⅴ免费一区二区三区| 亚洲第一色在线| 亚洲精品在线视频观看| 亚洲自拍另类| 久久精品最新地址| 欧美激情在线免费观看| 国产精品你懂的在线欣赏| 国产一在线精品一区在线观看| 亚洲国产成人久久综合| 一本色道久久精品| 欧美专区在线| 亚洲国产1区| 亚洲一二三区在线| 男女激情视频一区| 国产精品日韩一区二区| 一区国产精品| 亚洲一线二线三线久久久| 久久久综合网| 夜夜精品视频一区二区| 久久久久高清| 欧美日韩在线播| 在线看欧美视频| 午夜日韩电影| 亚洲裸体视频| 久久久久久一区二区| 国产精品成人一区二区艾草| 狠狠色2019综合网| 亚洲欧美成人一区二区三区| 欧美~级网站不卡| 亚洲私拍自拍| 欧美电影免费观看高清完整版| 国产视频久久久久久久| 一区二区精品在线观看| 麻豆精品91| 午夜精品久久久久久久99水蜜桃| 欧美精选在线| 最近中文字幕日韩精品 | 91久久国产自产拍夜夜嗨|