zoukankan      html  css  js  c++  java
  • [HDOJ1823] Luck and Love(线段树,树套树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1823

    体重就一位小数,可以扩展10倍更新。

    坑在了更新人的时候,不应该直接更新,而应该求max,竟然在这里犯二。。

    外层更新的时候,线段树的每一棵字数都要在判return之前update内层的树。相当于及时更新了吧。

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 
      4 #define lrt rt << 1
      5 #define rrt rt << 1 | 1
      6 const double EXP = 1e-9;
      7 const int maxn = 210;
      8 const int maxm = 2020;
      9 
     10 int m;
     11 char op[3];
     12 
     13 typedef struct NodeY {
     14     double val;
     15 }NodeY;
     16 
     17 typedef struct NodeX {
     18     NodeY segY[maxm<<2];
     19 
     20     void pushup(int rt) {
     21         segY[rt].val = max(segY[lrt].val, segY[rrt].val);
     22     }
     23 
     24     void build(int l, int r, int rt) {
     25         segY[rt].val = -1;
     26         if(l == r) return;
     27         int mid = (l + r) >> 1;
     28         build(l, mid, lrt);
     29         build(mid+1, r, rrt);
     30     }
     31 
     32     void update(int p, double val, int l, int r, int rt) {
     33         if(l == r) {
     34             segY[rt].val = max(segY[rt].val, val);
     35             return;
     36         }
     37         int mid = (l + r) >> 1;
     38         if(p <= mid) update(p, val, l, mid, lrt);
     39         else update(p, val, mid+1, r, rrt);
     40         pushup(rt);
     41     }
     42 
     43     double query(int L, int R, int l, int r, int rt) {
     44         if(L <= l && r <= R) return segY[rt].val;
     45         int mid = (l + r) >> 1;
     46         double ret = -1;
     47         if(L <= mid) ret = max(ret, query(L, R, l, mid, lrt));
     48         if(mid < R) ret = max(ret , query(L, R, mid+1, r, rrt));
     49         return ret;
     50     }
     51 }NodeX;
     52 
     53 NodeX segX[maxn<<2];
     54 
     55 void build(int l, int r, int rt) {
     56     segX[rt].build(1, 1000, 1);
     57     if(l == r) return;
     58     int mid = (l + r) >> 1;
     59     build(l, mid, lrt);
     60     build(mid+1, r, rrt);
     61 }
     62 
     63 void update(int x, int y, double val, int l, int r, int rt) {
     64     segX[rt].update(y, val, 1, 1000, 1);
     65     if(l == r) return;
     66     int mid = (l + r) >> 1;
     67     if(x <= mid) update(x, y, val, l, mid, lrt);
     68     else update(x, y, val, mid+1, r, rrt);
     69 }
     70 
     71 double query(int yl, int yr, int L, int R, int l, int r, int rt) {
     72     if(L <= l && r <= R) return segX[rt].query(yl, yr, 1, 1000, 1);
     73     double ret = -1;
     74     int mid = (l + r) >> 1;
     75     if(L <= mid) ret = max(ret, query(yl, yr, L, R, l, mid, lrt));
     76     if(mid < R) ret = max(ret, query(yl, yr, L, R, mid+1, r, rrt));
     77     return ret;
     78 }
     79 
     80 int main() {
     81     // freopen("in", "r", stdin);
     82     int h, h1;
     83     double aa, ll;
     84     while(~scanf("%d", &m) && m) {
     85         build(1, 200, 1);
     86         while(m--) {
     87             scanf("%s", op);
     88             if(op[0] == 'I') {
     89                 scanf("%d%lf%lf",&h,&aa,&ll);
     90                 int a = int(aa * 10.0 + EXP);
     91                 update(h, a, ll, 1, 200, 1);
     92             }
     93             else {
     94                 scanf("%d%d%lf%lf",&h,&h1,&aa,&ll);
     95                 int a = int(aa * 10.0 + EXP);
     96                 int b = int(ll * 10.0 + EXP);
     97                 if(h > h1) swap(h, h1);
     98                 if(a > b) swap(a, b);
     99                 double ret = query(a, b, h, h1, 1, 200, 1);
    100                 if(ret == -1.0) puts("-1");
    101                 else printf("%.1f
    ", ret);
    102             }
    103         }
    104     }
    105     return 0;
    106 }
  • 相关阅读:
    ThinkPhp6.x+AntDesign+Vue前后端分离快速开发平台
    Laravel8.x+AntDesign+Vue前后端分离快速开发平台
    JavaWeb v1.0.0后台开发框架,专业版发布——细节完善,体验优化
    高并发情况下的DB重复插入解决方案随笔
    jQuery.qrcode.js客户端生成二维码,支持中文并且可以生成LOGO
    新能源车牌的问题
    OCR识别移动端的实现与应用
    在拥有vin码识别的时代,您还在傻乎乎手工录入吗?
    国内的车牌识别算法怎样选择
    一码在手运车无忧
  • 原文地址:https://www.cnblogs.com/kirai/p/6790743.html
Copyright © 2011-2022 走看看