QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2385|回复: 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组决赛题解第九题  i, _8 E% D; P8 C! l0 a
    / g" g% ]1 L/ }" N) `

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)
    0 S, N3 G6 I0 b: l/ ~每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
      t/ D2 Z3 g" d: i, ^3 E/ `& l0 G查询的时候返回含有8个值得list,并不断merge

    代码:


    * F7 |0 k7 l7 B& _#include<bits/stdc++.h>  S1 I5 g, c9 D/ D! v4 a% \
    #define mem(a,b) memset(a,b,sizeof(a))
    & j3 Q5 v2 }% W7 L* Y- lusing namespace std;7 |$ ?  \" M) f' V0 {4 `: u
    typedef long long ll;
    - T3 m6 v# {$ S% uconst int inf = 0x3f3f3f3f;
    ) q0 A- b9 r7 x$ w' a- L" p' C( ^+ k: wconst int maxn = 1e5+55555;
    9 X+ Y% H  Y" V% R+ \const ll mod = 998244353;
    8 H' R0 O7 n4 G0 Sconst double eps = 1e-7;
    3 w8 R" D" U4 U# b8 G7 l- b& z; h1 Z' {6 C! u
    struct tree {) S3 H' a- z" o
        int l,r;
    6 H5 c. h; Z, J  r7 [    int p[10];
    % R0 v! N7 S8 j. j) @6 |} t[maxn<<2];9 P9 |* K( T9 [5 P# G8 E
    & T+ G! {8 q% K0 p4 a2 R: t: e
    int l,n;# v3 e% I1 T* B4 A, j
    7 E5 x1 E1 ]$ k4 T; o8 Y+ [
    void build(int i,int l,int r) {
    - l' D2 S$ l0 q& s& v2 f+ k* d5 k; l    t.l = l;
    # O6 z' u7 h5 b- c  l/ R    t.r = r;
    ' }; h$ M, I8 n2 f7 B+ _' e    mem(t.p,0);
    ) d6 R3 B8 m4 E; a5 m! U
    0 G: v. I/ B8 r, S( }    if(l == r) return ;
    - f7 S! z" _# U  X4 J    int mid = (l+r)>>1;7 }( s2 [! U  L& C+ O
        build(i<<1,l,mid);
    ! V$ F6 A* C. |3 G& }    build(i<<1|1,mid+1,r);
    # w! w1 L; d1 q    return ;
    3 J" `6 p( M- e+ C: i# ~}, t+ U% v8 z6 p, u/ @7 G7 {# ]

    - V7 h( F# i* b- \/ Evoid update(int i) {
    % L5 y# m# D. F+ n    int cnt1 = 0,cnt2 = 0;
    4 Y$ R+ r. S5 P    for(int j = 0;j< 8;j++) {" v# @& _: T" q* ~6 Y& Y
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {& _& t% V7 Y# A5 d% F
                t.p[j] = t[i<<1].p[cnt1];8 j3 D8 X  Q2 r0 t
                cnt1++;) y% l' z; E& q( S  V
            } else {$ R( B* A# L' L0 n7 [' y& A8 s
                t.p[j] = t[i<<1|1].p[cnt2];
    5 r# r2 k- i/ W" V# d: m! W4 Z            cnt2++;& Y- ~: i+ b' ^  {
            }% M6 J/ r; o5 `( K7 ?% {! \
        }
    & K( y' G* v! b+ X, ~, m+ Z9 d  s    return ;
    1 O- d5 H4 v; W( m}
    " t) |% K( J  o+ D: X" R# `  ?7 B
    void modify(int i,int pos,int val) {4 ^: ]4 z# \2 I3 _; K9 }2 b/ h! @
        if(t.l> pos || t.r< pos) return ;, ^$ g6 N/ U& K1 o, n
        if(t.l == t.r) {- p; F/ I1 `! y
            t.p[0] = val;
    1 V) U1 u3 F7 H4 i! Q! P        return ;' R1 b6 Q; F% |" J' z" M  L
        }
    8 x- y7 r& X6 }: z    modify(i<<1,pos,val);
    ( F. w1 H. ?5 B) a- |. C4 s& @    modify(i<<1|1,pos,val);2 n" X0 d, P6 r: }
        update(i);. [# J8 J6 o/ ~8 A3 N
        return ;
    ; }2 e5 l6 p: a& H/ c1 v}
    / A2 t) R, V- A& M8 `5 q, g3 Y
    9 u, z2 N: l) o! Ovector<int> merge(vector<int> ans1,vector<int> ans2) {! H" i4 a8 C5 N, ]" ?
        vector<int> ans;8 b' `: [" o) l
        int cnt1 = 0,cnt2 = 0;, g2 Q, {) J/ Z5 Z- ~9 q' O
        for(int j = 0;j< 8;j++) {, l7 W) g# L8 N
            if(ans1[cnt1]> ans2[cnt2]) {" s0 V# r2 @/ l; _* x
                ans.push_back(ans1[cnt1]);
    6 M/ Q' A' C: e' u5 d- f            cnt1++;
    " L4 D, j3 l9 G7 ~% y        } else {
    4 k: ~7 s+ i( E' s            ans.push_back(ans2[cnt2]);
    1 ]- G, c% S* E8 D2 V            cnt2++;0 F% E; f1 \/ n9 }  }3 |
            }
      j: K0 l/ l  e% y; P    }
    , `: V! w) o/ s7 g3 b    return ans;
    6 o* E3 A$ X) J}  |" F9 r) A/ V1 G
    ( i8 F. H& l9 i3 `
    vector<int> query(int i,int l,int r) {1 z5 N! @7 @4 j6 G( |& g
        vector<int> ans;  b$ B# X7 g& ^/ V! p4 _
        if(t.l> r||t.r< l) {, ^* D' j! ?7 i3 c
            for(int j = 0;j< 8;j++) ans.push_back(0);
    3 {" S( I! w# L3 D3 Y        return ans;! |# Y0 r1 I5 b. s# Q8 c! v' L
        }
    5 b) ~4 ]' H6 |9 v  N& @" l" u! S3 ?) t6 h. ^; K
        if(t.l>= l&&t.r<= r) {
    $ k3 A4 X; g8 Z/ D        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    ( J7 b; W# r+ i  Y% l2 E0 Y1 c" u        return ans;- b  i+ h+ m+ s+ R7 S0 ?) p& B. ~" S
        }% E* \0 P6 k3 A9 X

    ) V8 ^7 y3 b3 P) \2 B  G7 O    return merge(query(i<<1,l,r),query(i<<1|1,l,r));0 F& I8 p: `( k1 ^
    }
    7 l1 w+ |0 W0 Y% [  w, I7 x
    9 ~( g, a0 i; y2 O8 Iint main() {( A4 F6 R; ~( O  \" N7 n- u
        cin>>l>>n;
    4 i& S4 l7 a) s. C5 m  v  t; N5 ]# D. N5 b
        build(1,1,l);
    ' u1 I$ a4 z" _" ~" w) k    char c;
    " U, R2 b- L( C* v- `4 ^: W9 X    int x,y;
    3 W0 ?7 ]" K' \1 Y* \    while(n--) {
    7 m' }% {) `, U) P3 \" s( v# t        scanf(" %c %d %d",&c,&x,&y);
    9 A8 V1 v1 h% t3 R        if(c == 'C') {
    6 \0 f$ Z; D5 J" p            modify(1,x,y);
    " a7 c: Q: i. ~5 W: N        } else {8 s' O& c- D# {9 v
                if(y-x+1< 8) {9 ]* [& p  N: n# e3 A
                    printf("0\n");
    1 N% P. W3 V  }7 {( a                continue;5 M! _- L3 E& O4 C5 j
                }" d4 c0 n8 R3 z0 S* @0 e- g5 Y
                vector<int> ans = query(1,x,y);. s9 s' }: c: ~' }/ o) r
                printf("%d\n",ans[7]);
    2 j; l' y7 h) j        }4 a  H0 O0 c1 v" h
        }: ~) s" P( B& \  f
    0 ^1 a4 w$ H- ^/ w1 D9 D+ m+ e
        return 0;8 {2 b" f/ ]. ]9 s( b1 `
    }1 c9 k( c( r2 e' T2 A

    * n- N5 a3 L0 S--------------------- ' b# e& C8 z0 m3 E) ~; q/ V6 H
    作者:nka_kun 0 E8 n1 D% y* U; b7 Q- m' F+ [
    来源:CSDN * L, A; j* K5 y1 @# t- e/ e, J7 b

    $ t6 Q( [1 q  _4 G1 G0 S
    : ?  p, m% x" |" I  f5 e
    # w/ M1 d% \6 L; @
    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 15:45 , Processed in 0.402051 second(s), 51 queries .

    回顶部