QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2234|回复: 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组决赛题解第九题
    8 w3 {+ U# e8 o  P2 a; M7 T  I9 H# f+ ]$ I

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)
    * @  h# N$ v, T) R4 D每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    + E1 u, ~) S6 y& V; }2 I查询的时候返回含有8个值得list,并不断merge

    代码:

    4 m. M; u$ K1 V$ }
    #include<bits/stdc++.h>, I7 a! r4 ?' }: j6 d/ e
    #define mem(a,b) memset(a,b,sizeof(a))
    " m# M+ y4 g+ k: D' x2 Nusing namespace std;" y) Z" p5 B! ?" j& d, p% C5 m
    typedef long long ll;. {  r, k3 |. M0 ]; A) ~
    const int inf = 0x3f3f3f3f;
    " v& w$ V! h* r  m4 E7 D4 uconst int maxn = 1e5+55555;
    - T/ T, n. ~6 |5 w; E) mconst ll mod = 998244353;. t* |% R5 \' \  ]
    const double eps = 1e-7;
    0 k) e- f; R4 t! a( q# S+ O- E4 Q. [5 Z3 z
    struct tree {
    9 t5 N. U. ]0 V, `) h" K    int l,r;
    0 Y) u) m/ [* J, {, ~9 ~, r    int p[10];' A9 t" v. D7 z2 }+ k- _
    } t[maxn<<2];1 v5 n. F8 Q& d/ `

    3 Q9 g7 z3 i& g. f, C4 k# {int l,n;9 E5 `; K' l7 ]' x: o$ H+ z
      z5 b  S* c, ~) A7 e2 ~& G! \1 n
    void build(int i,int l,int r) {8 o  S8 }/ w- Z( H/ }3 V
        t.l = l;7 e& m6 A/ V. J% D1 D' H) k+ @
        t.r = r;
    8 n( w( B, c: l) r- Z    mem(t.p,0);  Q3 J5 K: }5 g
    & w/ v' r6 l8 D% j; w6 C
        if(l == r) return ;) n8 i$ N" ~: I/ o; d
        int mid = (l+r)>>1;) {- j" M4 p- r) W! j. ^1 H
        build(i<<1,l,mid);* k& k* x% h- _, q+ L8 O
        build(i<<1|1,mid+1,r);
    ) i; _4 I$ M5 z6 [( F    return ;
    : x. z5 Z; H5 W6 f# o}% o1 i( G9 v7 K6 I$ }

    6 q- l3 [; G3 o# n- bvoid update(int i) {
    7 f) O/ z, ~) o4 g9 F+ q    int cnt1 = 0,cnt2 = 0;
    7 q: W+ k9 |% Y    for(int j = 0;j< 8;j++) {) v7 h/ W, p% [1 {3 [
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {3 v! @- A. w2 q/ ~0 A
                t.p[j] = t[i<<1].p[cnt1];, Q5 I6 B" x9 n+ G! C
                cnt1++;
    . K0 y8 j' ?! P, o4 d% P6 s9 f        } else {7 M4 h/ B$ s8 h" S1 C- t' P
                t.p[j] = t[i<<1|1].p[cnt2];4 p! I; t8 z" z0 m1 S
                cnt2++;
    + r7 M2 [: l' W0 i0 f& @9 I: X        }* ~/ s, [! ~: Y" G& l4 ~
        }
    + ^0 k& N4 k7 v    return ;. p  S7 s9 ~# P* F* Q" w
    }
    8 Z7 H2 J# M2 ~( D+ g! I3 h3 A$ v- K; g# T9 }# @! R
    void modify(int i,int pos,int val) {" U9 M; t* V, |
        if(t.l> pos || t.r< pos) return ;* b7 t: N' {# G' z
        if(t.l == t.r) {. B4 j7 X: [% u* Z% m0 y7 t# E. x
            t.p[0] = val;
    6 t+ A4 z2 e- o$ T; M5 H* i+ E        return ;
    0 |/ a+ t% `7 [5 Q0 q' T. G- l    }( L4 O3 {6 T  h! w
        modify(i<<1,pos,val);; w' y8 C6 G' x6 U0 K! B5 @& |* z% g
        modify(i<<1|1,pos,val);) J, U% }# H2 o
        update(i);
      n8 S8 g4 e8 x" Y- a/ P    return ;
    7 V' H, l. |5 u8 L. Y0 H' j) x}
    . t& U2 C- l/ b: k& E
    . k& A" _3 U& gvector<int> merge(vector<int> ans1,vector<int> ans2) {* ~: o' k; r5 E
        vector<int> ans;
    3 c8 Z( G, s  f8 [, s2 H% v  N    int cnt1 = 0,cnt2 = 0;
    3 `' `& x' H9 }7 b% @9 c    for(int j = 0;j< 8;j++) {/ B' k7 o1 a% T5 M3 U3 K) P
            if(ans1[cnt1]> ans2[cnt2]) {
    : ~4 E# h7 V- B# P8 @; ?            ans.push_back(ans1[cnt1]);
    8 \( n0 D8 E8 Z4 |3 D' E4 X            cnt1++;
    " d% N' A7 K% g- f; v        } else {# a! q: B. z4 S4 i/ W# g1 f$ N
                ans.push_back(ans2[cnt2]);( W, o* \( N( D! O/ {% I8 S
                cnt2++;6 w6 n4 ^! B, M: i; _& d
            }- `' N% j) j) _; E4 ?6 X, A: T
        }
    & P& [; t' h8 L1 B9 U1 C    return ans;: C6 y$ X7 a; L7 K; d" d+ D
    }3 Q7 M' X  {7 k' }8 O" l0 M5 _
    ) \+ _" x, G9 N
    vector<int> query(int i,int l,int r) {$ w! m+ M+ S4 y, T6 M
        vector<int> ans;: ^' k5 r% ^* ?" F' e
        if(t.l> r||t.r< l) {+ J* ?/ \6 r: I! I
            for(int j = 0;j< 8;j++) ans.push_back(0);
    % k' b! A7 w0 P6 o) Q! W1 L        return ans;# n$ z& }+ R8 Z# N2 G6 V7 o
        }* ^. t' y( [! n) C  }) e) k

    2 ?+ Y* e! ^) `( V  V9 T    if(t.l>= l&&t.r<= r) {
    0 S# N/ E9 `; a7 D' |        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    2 |  j% }1 ?7 \0 |" e        return ans;
    , H& S" _& z4 x; }. T    }- P6 _, j. o  r* `( Z

    9 w. d3 E" u. S' x: V4 X& e0 k    return merge(query(i<<1,l,r),query(i<<1|1,l,r));
      C) \! i6 C3 z. e4 H7 d% N}7 L" e4 o9 i) |$ r* J

    % B3 A* m2 \4 ]+ F/ D4 P9 U( Hint main() {9 w3 w' r& `& [+ q  A6 v
        cin>>l>>n;0 Q; p. i4 `; U9 K+ _

    5 J+ ^" X2 ~2 m% p2 H    build(1,1,l);8 {# G" a) c! e( B' k
        char c;: U, e: @9 L. z1 v. o
        int x,y;
    + ?" Y& P+ \7 O! |6 {    while(n--) {; }. ~& f( G+ p. f
            scanf(" %c %d %d",&c,&x,&y);% U, h( b" x7 C2 S; t
            if(c == 'C') {
    4 B9 b2 s# s1 x- w            modify(1,x,y);
    ( J5 r8 M6 T% G- L" R, z) Y* T6 D        } else {
    1 S2 M9 m7 ~  L% Z8 L            if(y-x+1< 8) {
    # ^/ m# X) T' f7 y( Q                printf("0\n");3 Z; r- `  K) i3 N! H8 [5 H$ H
                    continue;
    , b9 e7 W" o$ F6 T            }, `2 \. L" ]' l1 [/ J& I2 i$ Y
                vector<int> ans = query(1,x,y);
    7 M( B1 E# i+ a% A            printf("%d\n",ans[7]);$ R; T' P- W2 k. x# l. r& \* L
            }' A1 X( H2 M0 n3 i
        }  G, N, C: [- I. N9 H
    ) X& d% @- c4 L$ @) Q% l9 o
        return 0;! p3 U2 Z& P5 E' U# |- I: o
    }* L( F& j& D3 [. A1 {

    " D1 L% Z7 N! r: a) y--------------------- 9 I: a2 b3 {: H6 V2 C$ @9 d4 C; I# Q
    作者:nka_kun 8 Q5 U3 Q, Q" j7 R
    来源:CSDN
    1 `6 J( {3 ]/ k1 g' W7 N  ^" s' o! {' R
    5 T  Z7 o& x3 i
    2 M4 e8 T2 i+ B7 P$ m
    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-4-13 06:28 , Processed in 0.898822 second(s), 51 queries .

    回顶部