ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

hdu2795 Billboard

2021-01-01 22:02:17  阅读:264  来源: 互联网

标签:val int 线段 hdu2795 tag Billboard include root


21年的第一题线段树

上来没看出来为啥是个线段树

看一篇题解文字第一行:

用线段树节点存储该区间内空位最大的那一行的空位长度

等等我感觉我又行了

因为没加algorithm疯狂CE

然后因为一个小失误wa一发

很快找出来了

总体感觉还行

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<string> 
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8 const int N = 2e5 + 10;
 9 
10 struct node
11 {
12     int tag;
13 }t[N << 2];
14 
15 int h, w, n;
16 int a[N];
17 
18 inline void push_up(int root)
19 {
20     t[root].tag = max(t[root << 1].tag, t[root << 1 | 1].tag);
21 }
22 
23 inline void build(int l, int r, int root)
24 {
25     if(l == r){
26         t[root].tag = w;
27         return ;
28     }
29     int mid = (l + r) >> 1;
30     build(l, mid, root << 1);
31     build(mid + 1, r, root << 1 | 1);
32     push_up(root);
33 }
34 
35 inline void upd(int l, int r, int root, int id, int val)
36 {
37     if(l == r && l == id){
38         t[root].tag -= val;
39         return ;
40     }
41     int mid = (l + r) >> 1;
42     if(id <= mid)    upd(l, mid, root << 1, id, val);
43     else    upd(mid + 1, r, root << 1 | 1, id, val);
44     push_up(root);
45 }
46 
47 int tmp;
48 inline void query(int l, int r, int root, int val)
49 {
50     if(l == r){
51         if(t[root].tag >= val)    tmp = l;
52         else    tmp = -1;//这部分一开始就想到了,可能出现高度为1的面板,但手贱删掉了...
53         return ;
54     }
55     if(t[root << 1].tag < val && t[root << 1 | 1].tag < val){
56         tmp = -1;
57         return ;
58     }
59     int mid = (l + r) >> 1;
60     if(t[root << 1].tag >= val)    query(l, mid, root << 1, val);
61     else    query(mid + 1, r, root << 1 | 1, val);
62 }
63 
64 int main(){
65     while(~scanf("%d%d%d",&h,&w,&n)){
66         int len = min(h, n);
67         build(1, len, 1);
68         for(int i = 1 ; i <= n ; i++){
69             scanf("%d",&a[i]);
70             query(1, len, 1, a[i]);
71             printf("%d\n", tmp);
72             if(tmp != -1){
73                 upd(1, len, 1, tmp, a[i]);
74             }
75         }
76     }
77     
78     return 0;
79 }

 

标签:val,int,线段,hdu2795,tag,Billboard,include,root
来源: https://www.cnblogs.com/ecustlegendn324/p/14221033.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有