QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2319|回复: 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组决赛题解第九题! `2 v8 o. j' b/ J3 h: U4 }! Q" b
    ( ~0 l. Q0 v( N8 t

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)
    & H- Y8 p3 U0 A; G每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    7 l; M; A  x  n查询的时候返回含有8个值得list,并不断merge

    代码:


    - W; H' [4 b5 o#include<bits/stdc++.h>
    9 x: h9 j) p( e" p" D, @#define mem(a,b) memset(a,b,sizeof(a))
    2 p. [' W% s% kusing namespace std;
    , ~; x9 J' g' ^" W' utypedef long long ll;
    1 o1 I3 }5 I# T4 o' Mconst int inf = 0x3f3f3f3f;
    5 z+ W1 C& k9 n3 c3 k8 X4 _const int maxn = 1e5+55555;6 g  i" a8 u9 V7 d
    const ll mod = 998244353;6 ~. I" ~" L9 b8 X" i% ~) {
    const double eps = 1e-7;
    / @# r* p6 c2 G0 l. P0 [8 j: \
    2 M# g# T3 `9 J/ c7 j4 p5 U& E. Vstruct tree {
    ( n1 s7 s4 G3 c    int l,r;
    6 L& m1 g; z7 [    int p[10];
    3 _7 N2 E# V1 x} t[maxn<<2];
    8 S: b. E& a/ N. G# [" c7 K- Z" N
    int l,n;0 x$ O* V' h$ T( U
    $ ?8 @: s- d$ x* r. q5 H" u
    void build(int i,int l,int r) {
    ) _4 i6 O+ s1 h0 ^  @- f# I! u1 J    t.l = l;
    6 S+ n. E( q# S5 L5 g0 O  {    t.r = r;
    % f: L7 r+ |$ l# ]3 K, j    mem(t.p,0);+ n* [, @+ i; _% N
    ' @9 ~8 I5 r" g/ {
        if(l == r) return ;# p" I! T+ W# d' _# m+ ]
        int mid = (l+r)>>1;! Z7 b. T0 j/ s! [) Q0 d0 _
        build(i<<1,l,mid);
    5 d9 p7 i& w- t3 r. x2 i3 y    build(i<<1|1,mid+1,r);
      c6 I% q/ ^2 f1 n" C8 ~6 ?    return ;* w! ?) T5 l' g8 k
    }5 S0 N8 k6 a/ e' Q& @4 \# [* w

    $ t" [$ ?: G7 i8 [9 F9 Nvoid update(int i) {
    ; n1 e, z) z8 X4 ?- f/ W' p+ [' t2 o. I    int cnt1 = 0,cnt2 = 0;/ d, O* ?5 Y1 u6 ?; Z" v
        for(int j = 0;j< 8;j++) {
    6 g/ w9 \$ ]3 [' ]        if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {
    & `0 j* U7 F1 a' U4 E- |" |" k            t.p[j] = t[i<<1].p[cnt1];
    . x, ?: I: U% T4 {0 V            cnt1++;2 L7 f( t3 ?+ O1 k; u2 e) B
            } else {
    * M( t. w" i. h- }            t.p[j] = t[i<<1|1].p[cnt2];
    ' a. N! W# Q% `( ^- R8 B            cnt2++;
    + W7 Z+ {3 x- V# N/ g& E        }
    ( ]* p5 k2 L$ C8 b0 v, r4 n    }
    1 ^* _$ G' o, {" t" \- W: m4 Y% J) ^    return ;
    1 p2 I' Q& z& i9 C0 H}4 [8 V, [! B2 g* h- Y
    & Q9 S7 O6 V7 I' a" H
    void modify(int i,int pos,int val) {4 G0 O" C1 O  w1 S9 j* W
        if(t.l> pos || t.r< pos) return ;0 i' |4 g5 n5 P
        if(t.l == t.r) {
    ; y. R& @+ b5 @) Z& |        t.p[0] = val;  }$ a( T% |0 F2 x6 ^
            return ;- x6 J0 j* w% l& o. V
        }
    7 w3 |+ K8 y$ n+ H    modify(i<<1,pos,val);* X  h9 `9 A- c
        modify(i<<1|1,pos,val);
    ' @& F" v; E6 [' b9 n$ `" m    update(i);
    . r3 O- Z, U6 U7 ]8 D. t9 Y    return ;2 }$ e1 @4 Y, G2 k: i) K
    }) ^7 ]. v! f3 O3 V
    ! {% ]5 V: x8 r- n( N: i1 ^4 o
    vector<int> merge(vector<int> ans1,vector<int> ans2) {
    + w' f, ~- X$ }: N/ N0 y    vector<int> ans;- v, u& e2 [# K$ W8 L$ _$ X0 O0 H
        int cnt1 = 0,cnt2 = 0;5 n$ u: ^' z; b( }+ \5 [  z
        for(int j = 0;j< 8;j++) {8 e1 J" v& {2 Q9 @7 d. b' z# J6 `
            if(ans1[cnt1]> ans2[cnt2]) {& R, Y) b, a- @/ L: u
                ans.push_back(ans1[cnt1]);% P. `( M0 k9 E; V7 l  Y8 j3 R
                cnt1++;
    $ ?  @0 {0 m1 x" q* x        } else {6 |/ e, h& {4 X8 _, v2 ^: ~
                ans.push_back(ans2[cnt2]);3 d- U* m6 T1 Y# {* z
                cnt2++;
    : L0 v- F; n* W2 `( [1 X% Y5 E        }# {7 Y3 V; c$ A8 I  V' \# i4 u9 P
        }. ?8 _* P- ^, a' x" P, W
        return ans;
    % W0 I0 k; Q  E}
    0 A; J6 `2 ^' g9 I
    " G% Z8 B& n* M) Evector<int> query(int i,int l,int r) {
    5 b5 G$ `5 Q# n1 K    vector<int> ans;$ {4 N+ v" T4 u$ p* I, v
        if(t.l> r||t.r< l) {) f4 x9 U6 V" n5 H  S3 u$ Z  u
            for(int j = 0;j< 8;j++) ans.push_back(0);
    : z' `9 W' ^" W  q) ~" Z+ Q* L        return ans;+ r5 k. l! p& k' T! x1 }& Q
        }
    ! z4 y! y/ |! U1 r' l/ R$ X6 {! }+ A3 n* B. j
        if(t.l>= l&&t.r<= r) {
    ) P+ L+ q# x9 g* `        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    # ?' C0 x4 U+ _) d- m( K1 {# d        return ans;9 I* J4 U7 ~/ f9 r- W6 _
        }
    . a2 Z  S4 a4 R4 p1 M& w
    % j. p/ P- e8 X! k# q    return merge(query(i<<1,l,r),query(i<<1|1,l,r));
    & U$ G0 Y" ^4 n- w( z' {0 A}: i- i) a6 b: B/ \0 l$ M8 S
    + C) k) V" p2 e/ G1 K5 X- U
    int main() {) ?! Z6 [3 p/ x% C
        cin>>l>>n;  K: Y; h+ @) u9 m8 M
    ( t* b6 v8 i$ c6 N# g
        build(1,1,l);
    7 Y, |/ F4 h, T: I# Q+ {& q    char c;
    5 d9 u& z8 v0 T& L( f! D    int x,y;3 d6 m: P2 y! w+ q$ q  u9 s
        while(n--) {$ y/ b$ P0 @" b# w4 Z
            scanf(" %c %d %d",&c,&x,&y);
    0 T9 o# d) D/ A# v0 @- _0 X        if(c == 'C') {% p' b3 G" }; n  D1 {2 Q. Q! s" E
                modify(1,x,y);
    , m, S( c5 v) s3 \; O; L; Z        } else {" Q4 f8 }. d! _" q
                if(y-x+1< 8) {/ ?0 p5 y' a4 [. m
                    printf("0\n");
    / C2 e2 T8 J3 {7 E. Z                continue;% K9 ?" Q9 j0 b+ R8 s  N. o
                }1 I+ c( _* _: _# o& ^$ q8 l
                vector<int> ans = query(1,x,y);9 s4 q" X" B& ]& P6 n! w. H( P
                printf("%d\n",ans[7]);
    # V" r* _/ f; k' q  a7 f1 O& U/ X4 A        }* ]2 ?$ c8 `( W' Z7 G
        }
    ; \2 x/ x8 p7 P6 Z$ c/ Z/ W5 D; O) G8 n0 v8 l
        return 0;
    8 \& O$ D  Y( o$ @# l}
    ) C- b' M2 _" b$ E: }4 c4 M3 g+ ]$ \9 a' j8 I" B
    --------------------- - ^7 U; u# \. v- a' ^9 t$ G- I
    作者:nka_kun
    7 f- J2 K( H& {: }5 K来源:CSDN ! y' B0 }. {3 p% Y
    $ Q; y6 i% T. U: k% X& K
    % [% f0 `  j, V+ W
    ) `! n$ g$ n) C7 s0 e
    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-30 20:38 , Processed in 0.503942 second(s), 51 queries .

    回顶部