QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2269|回复: 0
打印 上一主题 下一主题

2019第十届蓝桥杯B组决赛题解第九题

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2019-6-28 16:17 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    2019第十届蓝桥杯B组决赛题解第九题, S0 c3 ~. S) A" q3 v
    1 f9 w9 h7 E5 g( |) |% y

    题意: 两种操作,C x y,将x位置的数修改为y,Q x y,查询[x,y]之间的第8大值,y-x+1<= 8的话输出0

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)2 O8 c* [$ p. `0 J) U! w
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    + }# |! X$ w$ S+ [- ?) d查询的时候返回含有8个值得list,并不断merge

    代码:

    ) A* r/ ^- M' Q$ g
    #include<bits/stdc++.h>
    + M' m" ]. ?& {2 ?9 M#define mem(a,b) memset(a,b,sizeof(a))
    2 C& a2 T0 I* R/ E+ ^2 L& F  nusing namespace std;
    , s# e! M: x* R) c( a$ Htypedef long long ll;; I4 Q5 R9 ~: r9 k! T2 A
    const int inf = 0x3f3f3f3f;7 N; b6 E% q) s) T7 M8 y+ R
    const int maxn = 1e5+55555;% X0 R5 _5 E  a# X- C! t
    const ll mod = 998244353;
    ) \& n! p& C) |: ^0 Z! X- econst double eps = 1e-7;5 _* X' w# U! z6 T! V* n/ H

    1 d/ v  Y. U' s# W! @; d* e. i2 mstruct tree {4 d8 U' \2 l0 G
        int l,r;
    ' J  @. e! g7 q+ I# Z0 m2 q    int p[10];- C* ^. b, q' ~
    } t[maxn<<2];
    , R  A7 X0 K% m, I/ D5 y: Z: ^" P( o4 T2 E) ]
    int l,n;: K- B9 j2 C0 s" M* z5 e0 B+ o
    ) }6 ?4 H3 o3 }9 Q6 n& V
    void build(int i,int l,int r) {1 U% l. L5 \+ U) i
        t.l = l;- `, g+ c8 \2 D  l. l
        t.r = r;% F) U. A9 D/ A7 J
        mem(t.p,0);4 X( c4 d  q7 V7 b! r" G2 L: T

    $ x; b5 b/ ]8 ~# x3 J    if(l == r) return ;% v5 F: `# f# Y: ~
        int mid = (l+r)>>1;
    + U! {) j6 g4 V, H1 U    build(i<<1,l,mid);* s, D* }8 b( v+ P& M2 h2 h
        build(i<<1|1,mid+1,r);0 m3 q) F4 S0 m1 f' y
        return ;1 K1 I" C5 V& O' w
    }
    - W  q( V9 P; @) F
    6 Y, a2 F0 f6 A/ Jvoid update(int i) {% y2 {( N! u, R9 ?/ s( J) ~
        int cnt1 = 0,cnt2 = 0;
    4 m) |6 Q+ g9 y: z    for(int j = 0;j< 8;j++) {8 D: \8 d4 [( f" s6 x0 B4 a
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {' ^3 Q, D! `& g+ P6 L+ f" z& P
                t.p[j] = t[i<<1].p[cnt1];
    4 ?4 R8 M' f- G- O            cnt1++;
    9 e$ u6 K0 E% [% Z" |1 ^* A  g) M        } else {
    ! y) j% Z' |2 Z. T4 ^            t.p[j] = t[i<<1|1].p[cnt2];
    * c( |& T% i" m$ e            cnt2++;7 C5 Q: c) e) @$ T
            }
    ! M( y0 g% w' o) N    }
    0 |6 ~; W& K: z/ T! ~3 N- E    return ;
    , i9 V0 d9 `7 e4 x( F% M+ F5 S}
    / c* H: c/ t  H# r4 e+ z8 S% O9 I. {; t0 w3 ]' o1 h) N
    void modify(int i,int pos,int val) {
    " m5 I  |* }9 \+ c  b    if(t.l> pos || t.r< pos) return ;; b1 J$ k" {$ y  S  X  A+ u
        if(t.l == t.r) {
    - V! F5 N) d! V        t.p[0] = val;9 }+ o2 X; u6 l) L& r
            return ;
    1 s" M8 \+ a2 H, P+ ?& O    }
    . p! q( ?$ L- J# ]# Q- e6 |6 k    modify(i<<1,pos,val);
    . T" o' t. V% S3 M* g  Z5 F    modify(i<<1|1,pos,val);
    . u! z' o& x/ B    update(i);0 P( T0 G) x1 V* ]) ?- |
        return ;
      f: }: e* e1 ^$ P4 v3 t0 u- z}
    - S8 F1 n% u% n6 C
    ) r6 K1 A. B- ]9 A0 H* {( xvector<int> merge(vector<int> ans1,vector<int> ans2) {
    * c4 R" H3 a+ l  C; M6 Z. O8 a( k    vector<int> ans;
    , G. H' S3 r/ v" W0 f9 g, z    int cnt1 = 0,cnt2 = 0;
    - d$ h- u4 a/ X, m' X7 g    for(int j = 0;j< 8;j++) {* O) {  \# o$ V% t
            if(ans1[cnt1]> ans2[cnt2]) {
    ) a5 e4 [4 j/ x3 g            ans.push_back(ans1[cnt1]);
    & Y! ]6 Q. P7 m8 |7 {; x* I8 q            cnt1++;
    - r) {) U% E/ _  n" n9 Q  B! P0 r        } else {
    2 Q+ K1 |) Y/ a1 V; m3 t            ans.push_back(ans2[cnt2]);
    ! O! \" M4 \# D% n& k: r3 X+ y            cnt2++;
    " J( {/ e+ p- d6 r* S7 ?        }
    / l, c% e- M; Y3 ?, _- t0 [5 C    }
    * |9 `3 [# J0 [! D/ P+ k" z+ H    return ans;
    * T( O/ z; k) T# Z}; s+ m6 T# D1 w7 w  D0 L( V

    5 s( s- W' B, d& Bvector<int> query(int i,int l,int r) {
    # K- C* L  u# F0 @    vector<int> ans;
    # `6 c( @# B' ^    if(t.l> r||t.r< l) {
    7 g! f! T) [: z. f& ~        for(int j = 0;j< 8;j++) ans.push_back(0);
    9 i5 G: f* d" ?8 _% t! I1 \        return ans;5 D+ O. [6 C2 B8 z; G+ E6 O
        }1 X6 q8 a7 v4 R( \

    ! J# f3 i; |+ @" Z    if(t.l>= l&&t.r<= r) {5 n" d2 _' B# r0 |  g" [  h
            for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    ( ]: v  M# f6 R3 t! U        return ans;
    & V9 i- g" Q7 e/ b% O8 v+ c; g, e    }
    . B. s3 f2 |5 y, Z' A& z
    ' w' ~  Y5 O5 e$ ^3 I    return merge(query(i<<1,l,r),query(i<<1|1,l,r));/ E. ]* E9 s& ]3 k0 P6 b2 H5 V
    }
      q9 B: _! u: ?5 f1 E- [1 O! @7 e# G- G3 m% W( v# Y
    int main() {
    % b% m/ O1 _2 H( X3 v4 M    cin>>l>>n;, h- P9 m* C  Q" |
    " T$ L' e9 N- O) I7 Y
        build(1,1,l);1 X! a, n5 P) O: n2 A9 S% I0 u
        char c;
    3 ?8 M$ O+ [% N& m' }& M    int x,y;* \8 V% z: o& ]6 T2 L: k
        while(n--) {0 w6 t: u: ]1 C& F
            scanf(" %c %d %d",&c,&x,&y);
    7 O. ]& {0 ^  _        if(c == 'C') {: A: a9 r. @- S
                modify(1,x,y);
    % u5 P4 T$ N2 X5 |) A        } else {, D8 b# h% `  d: Y' T9 g" u
                if(y-x+1< 8) {; {: ]- U$ j! c$ @/ X
                    printf("0\n");/ _. J& @3 H9 f; g: v
                    continue;
    - n: a/ M; n' a% h+ N) m            }% }" z; N$ H4 @4 ^! g8 F
                vector<int> ans = query(1,x,y);( v$ y! D1 k. i1 _3 R$ G
                printf("%d\n",ans[7]);
    ( N+ R8 X2 U- B9 u+ e        }
    ; t; {9 B* _4 G$ K" N: @# L    }: w  k! ~$ L+ {7 ^/ ?

    " U1 _6 J& L6 D1 j0 e& n% _. o' I  w    return 0;: s2 y/ ~) d$ P, Q- B+ o6 e( d
    }9 L, z5 o1 E0 J. w# z% c# U

    0 J! \5 |" t" w! k---------------------
    ( H6 d3 F+ h7 ~作者:nka_kun
    / @/ l- j: Y; h& _来源:CSDN 0 G# ~, C* m& u7 [. ~" p. F0 X
    * M+ K  C/ a  ~8 U3 X
    6 j& b, ^* p8 E* H

    5 J8 Y6 X- Q* Y: u
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-15 04:59 , Processed in 0.456079 second(s), 51 queries .

    回顶部