QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2316|回复: 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组决赛题解第九题
    ; m" S0 n0 m1 _7 g: `7 z5 V6 x
    . t% z. z5 e' Q$ J

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)
      v3 I. `* a- E5 y5 @每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    . M  F; F9 c2 @0 F" ?* j$ U查询的时候返回含有8个值得list,并不断merge

    代码:

    0 E5 L6 F6 e4 m3 r% M
    #include<bits/stdc++.h># g" D( D  X  X0 S
    #define mem(a,b) memset(a,b,sizeof(a))6 i9 m; q8 u& }9 u! W7 I6 d( v
    using namespace std;
    . c; j: L' [0 v" z3 ntypedef long long ll;
    $ ~1 U: {8 C0 ^  q/ \, _const int inf = 0x3f3f3f3f;. R3 V& W" F4 X  e( e' V
    const int maxn = 1e5+55555;5 C4 j( ]2 ]5 ]7 i0 k8 q; l
    const ll mod = 998244353;
    + V$ @1 A, y9 c3 a; ?7 @const double eps = 1e-7;  X9 o( x; s. n- W. |
    2 w/ i6 X: H1 J2 q- i
    struct tree {
    4 _& f/ B% |2 q5 f% q4 Q    int l,r;
    ; D9 Y: X& C  Y4 j    int p[10];
    & [5 j/ r' v/ W} t[maxn<<2];
    : T1 `4 B* `- ^  U" h* a7 y7 k4 m4 I* ^& x
    int l,n;
    ' \1 \1 b! }& G0 g, ]' Q
    ! Q, {. B; v1 k! }/ U$ mvoid build(int i,int l,int r) {
    # V+ v, c8 _. Z) [2 g6 O5 H$ p' V    t.l = l;/ h: S8 K+ R3 ?" S% {" {
        t.r = r;
    ( p& ^! t  l! |, \! q- r( s4 T- d7 I    mem(t.p,0);: y+ H0 D9 d- y+ D

    ) {; K4 L9 l7 B" ?$ w  s% C. h    if(l == r) return ;7 m1 B2 w, v3 Z3 b: s
        int mid = (l+r)>>1;
    ; H0 F* T# ^! M) D3 _6 s8 q( L( ?    build(i<<1,l,mid);
    " p0 ^: g4 N. _0 a7 n    build(i<<1|1,mid+1,r);% ~% ^  S/ ~$ ~' p
        return ;
    0 Q4 n6 H9 e' x! h, b( F}
    5 V! f$ P' v9 ^3 p. Z4 M5 J
    7 C) }% X' p/ t; C5 E+ Q( Q& {- e/ Rvoid update(int i) {. n2 W& T, w6 |6 A6 S4 N
        int cnt1 = 0,cnt2 = 0;; k8 p, V; \* b: A8 w# |: k4 t
        for(int j = 0;j< 8;j++) {
    4 C3 u  g( u# |- m, n        if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {6 Z% J' g1 g9 Y. @( c
                t.p[j] = t[i<<1].p[cnt1];6 c* ]7 O7 O/ R! c4 Q; P- S
                cnt1++;
    8 I/ L  c$ Y, ~" e# Z( n. b        } else {% k3 b- }6 H, y8 z' M2 U
                t.p[j] = t[i<<1|1].p[cnt2];/ S2 E( G( h! f6 ]
                cnt2++;4 x. G3 Y" h4 a, u6 u& M
            }5 f4 Z! H& L+ q8 [
        }
    # Z* Q/ x9 K& B* ~/ Z0 G    return ;' p* v5 a: X- u' ~1 @1 e
    }: u5 x/ u5 i  G1 o: m

    5 W4 \9 Z+ `1 gvoid modify(int i,int pos,int val) {
    # B3 a) s# Y' p    if(t.l> pos || t.r< pos) return ;4 R) _! P! s  K/ M" J; _5 o5 U' B
        if(t.l == t.r) {
    5 D0 c/ y, E: ]% n$ `9 m$ m        t.p[0] = val;
    " n! y$ c, A9 k        return ;. }# D( O& x0 B
        }, W7 A$ L  n; b
        modify(i<<1,pos,val);
    0 N4 H5 i& q) g4 P7 l! B) m" X    modify(i<<1|1,pos,val);
    0 u( h3 u3 h: ]6 [" L3 T0 b    update(i);  u4 w+ @4 H9 ?& l. P* u, l
        return ;3 a* j  u4 O: u; C/ T1 ^
    }
    9 h  M" q6 V$ H# ~0 A% M: t, `$ S1 k9 j* _% r" w$ u+ a. r
    vector<int> merge(vector<int> ans1,vector<int> ans2) {
    : }; ?9 w4 x& p( o3 g% n: d    vector<int> ans;$ P% v/ L/ {, |, c7 q- J; G
        int cnt1 = 0,cnt2 = 0;
    + x9 t% }( P0 C& ~2 k- e    for(int j = 0;j< 8;j++) {
    , B0 L, f. n# ?; \7 Z4 _        if(ans1[cnt1]> ans2[cnt2]) {
    , {, [0 X, \' P% R: x) W. O            ans.push_back(ans1[cnt1]);# E7 u( [5 _8 q1 w4 ^! I
                cnt1++;
    " n% z! b3 P+ Q# U4 j        } else {
    ! u; T, }$ i* _, k            ans.push_back(ans2[cnt2]);
    ( Y. |1 d2 P6 O            cnt2++;
    , L% e0 E# N" V, ], s. d        }. C% p3 i0 L/ B4 u
        }
    6 s5 M3 L# l3 i; K6 E7 e    return ans;0 s0 Q0 }  I3 E8 G- }( t
    }
    3 ^6 r- j. w" J) W% R) @: r9 v" |( U4 w
    vector<int> query(int i,int l,int r) {/ K  J4 g" f* `" ]9 f
        vector<int> ans;. p7 D1 k  p7 v' t; _
        if(t.l> r||t.r< l) {
    - F. q# m2 B) X+ w4 P1 T        for(int j = 0;j< 8;j++) ans.push_back(0);
    * X4 M/ w3 T# k$ O6 D& F! E2 O        return ans;
    ( Z& W$ |  z( G  N" r0 h    }
    ) r1 f" W- m  t/ z0 R( Y% F3 P: m( p7 |; c$ u1 [" b
        if(t.l>= l&&t.r<= r) {$ u: ]' i( X* d8 V" A% D! ]5 r+ \( ]
            for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    ( Y9 J* z; V3 t! T7 t3 [        return ans;* i+ I. S. v/ |- }
        }! E# O% n, x! ]7 c$ |7 b: `: k/ d2 n
    % \' i" P4 ^- u1 b8 y: N
        return merge(query(i<<1,l,r),query(i<<1|1,l,r));! x4 g0 x4 P9 |9 ^2 D3 z9 Y
    }
    ! z; W, {9 q: o0 V1 z
      c7 W1 T7 G( l3 g/ Mint main() {4 O) E0 X8 C2 l  T5 U
        cin>>l>>n;' K; Q, }% u3 H3 Z+ }/ f# Q3 v
    * s; q  _" B* r8 M5 n9 g
        build(1,1,l);
    9 f& J* ^9 E" q- ?. X$ R    char c;
    , V! T/ a; A& B1 v    int x,y;) ], D4 c8 Q$ ?3 @
        while(n--) {) N; ^: p* P$ F- `( v1 q1 d
            scanf(" %c %d %d",&c,&x,&y);4 J: X  r2 S- c1 L
            if(c == 'C') {
    ! O! ]# y) [0 @$ B: U% S            modify(1,x,y);
    $ @3 ?/ ]; Z' }5 X" R  k! @5 F        } else {
    - b) X3 E9 h) ~. N# c( s. ^            if(y-x+1< 8) {
    2 N5 y' s( f6 k) M# {& Y                printf("0\n");
    : o: |6 a# g4 W                continue;
    2 b6 U  [# n' {1 l            }$ \3 L8 @! W  [+ o  S
                vector<int> ans = query(1,x,y);
    1 }/ `* @& P% @' v- T6 ~            printf("%d\n",ans[7]);
    : ?$ l% @+ Z( h, i% A( N: C        }5 z6 A9 ^$ u, I
        }
    * ]. }) D7 ?: t( R5 m
    6 |  @+ R7 I8 _& Z. R    return 0;
    5 M. V' b% P" C9 w& u( R}. X5 E; k+ N: }9 c0 @: q

    ( j7 P; n4 t. Q6 M! `---------------------
    ) d( I+ p8 w9 T1 A+ P作者:nka_kun ! |+ u' |9 I" m8 ^4 G* Z
    来源:CSDN   ^6 c8 t' v* `& N- }

    - d+ n$ n! ?6 d% R7 X! k& @8 I/ b5 e% C9 O) m( _0 Y

    & q% O- j: e& h3 P& I
    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-7-29 20:42 , Processed in 0.327145 second(s), 51 queries .

    回顶部