QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2270|回复: 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组决赛题解第九题
    ; a! {7 Q; q! l7 g4 Q+ e
    + l. R5 Q5 O$ w& }: H* Q

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)
    . m& z( H% w3 i$ e  ]每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    ) v% @. |( S' K& S6 J- u查询的时候返回含有8个值得list,并不断merge

    代码:

    , [6 x9 H9 V8 v( c$ g
    #include<bits/stdc++.h>. j; k- S* w& m0 N+ J' b: P* T
    #define mem(a,b) memset(a,b,sizeof(a))! _1 J! W2 g4 a9 _5 v- V
    using namespace std;, U/ Z5 m+ e3 B9 Y1 e* y
    typedef long long ll;: T$ ^: J) k( y. ^) V1 h4 P2 G8 S
    const int inf = 0x3f3f3f3f;
    $ b3 v+ m/ ?' W0 ]; Pconst int maxn = 1e5+55555;
    ( J# `0 X6 U0 m0 I# e- Aconst ll mod = 998244353;
    , W8 p5 S" ?% M2 U1 V9 bconst double eps = 1e-7;  |) O9 O  m& ^! Z

    6 H1 H4 p7 p0 w& \" \& D& T: p  N" ~struct tree {
      q) F4 @& r# O    int l,r;3 F" ?( w# d& Y: B3 l& a  S+ `7 `
        int p[10];& }2 A0 J# y* d9 ?; X
    } t[maxn<<2];
    / w$ W6 ^4 U  ^4 @" R' M1 l& T3 B" [0 }. J9 s
    int l,n;7 z& V, J& ~* D8 u0 h# b

    3 n# J( G7 ?2 ^1 z" Pvoid build(int i,int l,int r) {  i* E$ b7 r: M0 U" {* g
        t.l = l;
    5 h, b, V' h" z) Q    t.r = r;
    * k5 h% k$ j9 v+ o: b1 I2 n    mem(t.p,0);9 N0 h. b. a# A

    ! z; i1 T# O* l# u$ \    if(l == r) return ;3 @& p- z5 b+ D+ _- {
        int mid = (l+r)>>1;
    ( x8 B5 y! k/ a4 l    build(i<<1,l,mid);9 S5 n  c& g  i' r
        build(i<<1|1,mid+1,r);
    2 S% V1 q% m4 a) `3 M    return ;' w) Q) M% S1 w( {2 f$ n, O
    }
    2 W. o* R% n6 y$ ^3 ?4 C6 I1 ?+ e. H' q! H. O' q
    void update(int i) {: s8 X1 D0 _- R' {! L0 p
        int cnt1 = 0,cnt2 = 0;- K0 k% x/ j, m9 l
        for(int j = 0;j< 8;j++) {1 O/ H2 g- m! ]0 h
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {
    # S. f' ^1 F, s& _: r5 F+ r& @. b            t.p[j] = t[i<<1].p[cnt1];( X9 t5 Q  M. V: }' `2 f
                cnt1++;; ?9 `9 B, W5 |. I
            } else {
    ; O9 u" L* z  P& C            t.p[j] = t[i<<1|1].p[cnt2];3 y& n' a/ a) \; _% _, B
                cnt2++;' t; |4 W2 }1 V  l5 Z; f
            }) S/ D+ ~4 a% o+ |
        }
    ) G. X, W. T4 q    return ;2 p6 B: [3 z; Q/ u
    }( `: v) {' P& |. x' r- c

    ( ^+ @, U2 G  S# Jvoid modify(int i,int pos,int val) {( v- f1 f. j7 ?. k  C. P2 K
        if(t.l> pos || t.r< pos) return ;/ r$ R$ Z% u( U  t
        if(t.l == t.r) {
    ) W  L/ c  P& \) d        t.p[0] = val;
    4 H$ k9 C- y2 Q, L. ^( A        return ;5 C- {- N% S2 ]
        }
    8 i0 f( I- H: g/ y( o% U  _7 u, M    modify(i<<1,pos,val);' `5 _- ^+ I  |* s* j
        modify(i<<1|1,pos,val);
    + `# Y7 }( b3 L2 g& n! ?% p$ O    update(i);
    0 d4 W6 n: b( ]8 x) t    return ;6 n! E; ?1 o& N
    }  m, N+ L- j# @$ a. U

    4 a# K* F8 u# h0 ~. Svector<int> merge(vector<int> ans1,vector<int> ans2) {: o' f0 ^4 w' [4 Y# u
        vector<int> ans;
    1 |6 d7 B2 f- n2 V' r3 p$ L    int cnt1 = 0,cnt2 = 0;# ~7 P0 ]* y, Y' P0 k/ t
        for(int j = 0;j< 8;j++) {
    1 m0 o0 s; E1 H- ~0 z        if(ans1[cnt1]> ans2[cnt2]) {
    * h  B  _% _5 p+ s$ g5 N            ans.push_back(ans1[cnt1]);* p$ `' P- t) ]- X- ?: ?8 Z) x
                cnt1++;4 Y1 Q6 y; o& ?$ L; g
            } else {
    ; `3 x6 o7 g$ [( m            ans.push_back(ans2[cnt2]);
    % S; y$ }: {1 G4 v            cnt2++;
    - `; C4 b1 D+ d        }  S2 ?: Q9 I5 h9 |! |
        }4 [; T- F- w$ Q8 P( m* f
        return ans;
    3 W+ v2 r6 d3 b+ @4 P}
    # `; l4 S& f! j- g; [- q: b# ~8 y+ p0 E5 U& m- A" ]8 }$ y+ i# l
    vector<int> query(int i,int l,int r) {1 ]0 s' z+ \2 e) R6 K
        vector<int> ans;* I0 M5 T" ~: |2 L: _- A
        if(t.l> r||t.r< l) {$ s, n0 N& `  S) s2 ~
            for(int j = 0;j< 8;j++) ans.push_back(0);
    ) F; @9 |0 s, U% I+ D% ?0 ?, `& D        return ans;
    9 u0 z: Q' c4 A4 L9 t% g6 @    }2 h3 d* l8 H! J% R4 J' X

    " Z. p' H5 d6 p- v! N# d    if(t.l>= l&&t.r<= r) {
    $ k% T) G0 }0 l; J4 z- F5 U        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);& ?$ o0 h8 Z* q. K$ h$ r1 W
            return ans;6 o7 i1 L2 [3 \2 g! H% `
        }6 |6 ]# ?8 f+ X2 a+ }5 r4 t
    ) h7 r! O7 U8 m/ i/ H% @
        return merge(query(i<<1,l,r),query(i<<1|1,l,r));
    : }; h0 V3 u' L& b! P" T}
    + i+ w/ y' Y4 D+ ~8 e& x
      G: B+ `9 S. d& ?, X* H& A" i$ dint main() {
    $ k# f" {9 w# f/ y  b# M6 `, j$ ^    cin>>l>>n;$ o6 k% _$ a0 ]- v8 y- }" o, z' \

    - e# V) z( n- }- x6 M3 h6 m    build(1,1,l);
    0 b* z& R, C- l' g( U# @( j    char c;6 w7 w% H9 |8 [, e! [
        int x,y;
    8 p/ `$ Z, {+ `6 S    while(n--) {9 M: C# |" u+ I" i5 B
            scanf(" %c %d %d",&c,&x,&y);
    * w' @9 n1 V' V        if(c == 'C') {/ O$ y# X3 w. R' k/ ~" u
                modify(1,x,y);
    . v. A; K) W3 {- H  M+ U0 A2 N9 V        } else {
    8 `/ w- X. C# C            if(y-x+1< 8) {; y% ^+ {* n. K5 f0 _
                    printf("0\n");/ t% r% W0 ^$ Z. {2 p* l6 S8 E
                    continue;
    ( w2 J9 d& v$ V+ w. \            }* l+ ^7 q* @. i6 z! c) Q
                vector<int> ans = query(1,x,y);# e$ P1 }# l+ U; i5 p
                printf("%d\n",ans[7]);
    8 d2 m+ n# j% X3 `/ `' I        }
    ; [6 ?6 N+ m. K4 C8 @    }- T" `  z2 M8 N
    # l3 B$ k0 z  k5 Z5 a( v
        return 0;
    ' y2 z8 f: H, q- X}
    $ h5 Y1 l6 o' y8 i/ ]0 B6 r5 }3 V7 y7 q# A
    ---------------------
    / y1 ]* m  }) j9 [( D作者:nka_kun : E1 b8 D6 M. W( \* J9 R) y8 l' D
    来源:CSDN - H" {2 q3 N7 r* ^( Q

    / v8 D9 B" d% P5 W: L1 I* R! Z2 Q0 B) U

    : c1 `: m5 h6 f; l" v
    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 14:43 , Processed in 0.410043 second(s), 51 queries .

    回顶部