QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2380|回复: 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组决赛题解第九题
    5 y9 p+ T& c& O. u% C% V% s
      K- n7 f* M; o" l. B

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)/ G' n1 s4 c$ Q
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8- ^) J9 v' E3 ~8 G, ^
    查询的时候返回含有8个值得list,并不断merge

    代码:


    ) s9 I" h% }8 i( D5 x+ X$ f#include<bits/stdc++.h>
    & {* C: c: j- y#define mem(a,b) memset(a,b,sizeof(a)): d1 c7 t% K7 U% R  n( H" K
    using namespace std;
    - c7 i& X. y  y3 `" u- l4 c  atypedef long long ll;
    3 c) Z5 d3 w8 Vconst int inf = 0x3f3f3f3f;' i1 ?+ F9 B) ?  L
    const int maxn = 1e5+55555;# k0 w$ J+ F) e% A* ?9 G+ }+ r
    const ll mod = 998244353;+ T! l  r& ]8 W: a8 u' R( `
    const double eps = 1e-7;
    $ d/ v' W7 P  j0 i2 \! ?
    4 A7 y( R: @6 a& X% }struct tree {2 t. |1 W- M  D- R- B4 n7 [0 i
        int l,r;
    ! }( {. y& n% `    int p[10];
    , F) q2 m! t! D4 {1 \} t[maxn<<2];6 H* x, g+ }0 _  ?" c
      y) A5 W1 U2 {' _8 B0 R
    int l,n;9 }3 j" Z& T3 f& E

    $ k# L, c0 e1 ?& ?- Gvoid build(int i,int l,int r) {% _* I( s& x) H) H+ ?! q
        t.l = l;% Q) X; b' m+ @6 `; F" I
        t.r = r;" s0 u, S4 W3 q
        mem(t.p,0);
    3 @# w3 @; b* J' a) N/ i( j8 I# q, D$ ~- a) ?" L% c! k
        if(l == r) return ;1 @$ C' p: p- j) V& m3 d) Y& p' W
        int mid = (l+r)>>1;8 K; x+ \; U$ L5 p9 T. ?
        build(i<<1,l,mid);) {% s  j; F. C3 D  k& B
        build(i<<1|1,mid+1,r);0 V3 P* @2 n4 \! y
        return ;
    9 w; t, @) k" V, R. _0 S}# {* }1 D" ]2 A4 V1 d: }( ^

    % b1 w9 T" R: Bvoid update(int i) {
    2 Z# N* y+ c, }3 _4 W: N. K    int cnt1 = 0,cnt2 = 0;6 k- |  Q) f. }5 w2 Z# P9 V, V
        for(int j = 0;j< 8;j++) {
    , Z8 K! [9 R! j! b( w8 Z  h3 T6 O        if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {5 }; I) Y0 |9 \6 v# [9 E7 O
                t.p[j] = t[i<<1].p[cnt1];
      n/ ?1 ]4 ^, Y; J9 O9 k/ w( `% o            cnt1++;. F) N- L1 q- H/ h( Y: w4 p% w3 Z0 _
            } else {4 r/ _" V! C2 B7 X
                t.p[j] = t[i<<1|1].p[cnt2];0 p0 \( r0 Z* w0 I, Z5 ]! t
                cnt2++;
    ' @3 f* I: N; r1 O        }
    0 @% C! B1 i" ~. Z8 a. c$ F    }/ j4 O& X% |+ n+ U
        return ;* K3 p  E! C" D( I. L
    }
    # p  Q& K; v0 ]# p. L" T& V& X: G1 `+ S% s
    void modify(int i,int pos,int val) {+ t8 _3 J3 p& G1 Z5 z5 Z
        if(t.l> pos || t.r< pos) return ;9 _1 {9 Z+ X/ n
        if(t.l == t.r) {
    + Y7 b5 i, }- A. ?' P6 P5 g$ ]        t.p[0] = val;
    ! h8 f2 J* ^4 K, x1 ?# C7 c0 T        return ;: ]: c+ M2 D& r/ }7 z% n
        }
    " X9 |& J2 n; p' H- @    modify(i<<1,pos,val);, h, I+ ~* e3 t7 g. Q8 J4 O- B
        modify(i<<1|1,pos,val);/ g& c9 c9 v# o1 Y* m
        update(i);
    4 b. g; t6 I5 ?1 G& {- a" v    return ;0 U3 m& U! I4 E; b, d; t& `
    }
    : e) }" i) h2 Y; p& A/ I8 w$ p! Y+ N) U" ~" s
    vector<int> merge(vector<int> ans1,vector<int> ans2) {0 I8 g: J- ?, U: ]8 q4 X$ c
        vector<int> ans;
    $ c$ B8 x0 w: `, m    int cnt1 = 0,cnt2 = 0;
    0 O' _5 _, r) y. e: v! W$ T    for(int j = 0;j< 8;j++) {% Q# E) A4 v$ n0 X. F0 M& U- T- x6 ^
            if(ans1[cnt1]> ans2[cnt2]) {
    # Y% D7 l! n5 S& n0 n            ans.push_back(ans1[cnt1]);$ |7 m! p) D/ s% r
                cnt1++;
    5 m( H& H, P. ~        } else {
    0 e+ J: Q. q5 e3 S( ^% p2 G+ g            ans.push_back(ans2[cnt2]);$ F2 g1 Y7 A! `: m7 W% p6 Q8 ^
                cnt2++;" ]4 M. l/ p2 u; d
            }
    % \! ^! g" p9 {# o. q5 E    }
    1 D# i& T1 [. o* H/ B; s    return ans;
    ) z9 U2 Y% J% \2 o4 M5 u+ T' ~( V}
    , ~6 n$ `# W! c/ w$ w  s, }
    , R- Y$ P, v0 I0 b; b- y, G6 o- ^0 [vector<int> query(int i,int l,int r) {
    ) N( L/ N6 a6 s3 C9 W    vector<int> ans;8 W5 O% z3 y( C$ f
        if(t.l> r||t.r< l) {) V( w3 M: U* s9 k
            for(int j = 0;j< 8;j++) ans.push_back(0);1 h: E/ G$ B1 |- o' P7 G( A- m
            return ans;! w' k' k9 [, G5 T, g% A, e! N" F
        }
    5 M# g! U. H* U0 C  M* R3 B. t. x+ V6 d' W* m
        if(t.l>= l&&t.r<= r) {
    ) w- Q/ R: M2 Z/ W% I        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    + ?3 o) C- y0 i2 c+ V6 G( m        return ans;
    ' P, @# i5 [3 Z; a/ t9 X! ^    }5 i. d# T* e4 x8 B& J1 R! H( H

    ! f# K6 y7 a% _. c+ U    return merge(query(i<<1,l,r),query(i<<1|1,l,r));: b! L% T/ ]# s' z
    }) J/ x% T. J3 X" N, O# A$ \

    9 G3 r6 k* p, k' _6 i/ B! B* eint main() {
    2 D  w" i1 o5 j7 o/ L; L( R" T( f    cin>>l>>n;" x* e* b- r4 a7 b# F6 u

    # u6 R. |& H; H% ^$ h# I8 \    build(1,1,l);
    * y, N! T+ @. D    char c;
    9 B" R8 J/ L3 r2 A$ ?% i, E    int x,y;, Z8 o$ b6 B8 ~  Z0 A
        while(n--) {( c8 u0 c- g' ^( }$ K
            scanf(" %c %d %d",&c,&x,&y);! Y0 m7 ?. }/ p* b% U* |( E* Q
            if(c == 'C') {
    ' p. U4 \5 t6 x3 E* q! j: l& c* B( @            modify(1,x,y);
    & P: j, b5 {0 I4 L2 j3 A" g        } else {0 r9 n0 s7 R/ C  N( M
                if(y-x+1< 8) {+ `5 z/ W; I/ {5 u5 \! \+ Y
                    printf("0\n");
    , _8 M" \, `* D2 f                continue;' S' H0 b, h6 k
                }! g- ]3 {4 R3 o2 g7 h( o+ Z
                vector<int> ans = query(1,x,y);
    : ?: [# b4 H3 s" t; O' j/ Z' ^            printf("%d\n",ans[7]);
    % h5 E5 F7 u- P; c* m7 ?, K) Y        }
    5 d+ f4 i& q/ F" O* p    }
    ) {- ]/ S7 h4 v2 `7 a) l2 o1 P$ S: t' t; _! j8 x& M  }" X$ U
        return 0;
    4 L0 j+ F, }( R% w}! h; p9 m4 V3 i/ u; `" b6 m

    7 V! H! [. u! Q+ j( R1 T--------------------- . f- A! Z' q- X) Z0 D8 X
    作者:nka_kun
    ! g3 n: a2 `  l2 \+ K7 v* \来源:CSDN / s7 r9 T8 M- K

      I' F7 d6 C+ A( x+ N+ ~: y% R( y3 Y( @
    . F4 P) X. ]3 y% Q* \
    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-9-27 14:16 , Processed in 0.308218 second(s), 50 queries .

    回顶部