QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2382|回复: 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 M6 }& L: w  K; X1 C& @: h
      C% Z( B$ K) G8 @# x3 }

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)# Z; h& g  E" |, W9 Z
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8' Z2 I' R/ B& ^9 r$ D9 [
    查询的时候返回含有8个值得list,并不断merge

    代码:


    : J. F; R7 Z. Y- _' x2 A. o/ c#include<bits/stdc++.h>
    ' p& b% d. G; |+ ]8 x, ^1 s1 Y#define mem(a,b) memset(a,b,sizeof(a))* }3 i( @/ q& a8 L7 Y: n
    using namespace std;' p+ l% i1 \# I: r6 k' B
    typedef long long ll;9 n# i- E6 E% H! p: y
    const int inf = 0x3f3f3f3f;
    + p0 o. D, c# s- L- C) v% uconst int maxn = 1e5+55555;$ l  ]7 |: A$ y
    const ll mod = 998244353;  i( e  t/ n# W9 Z
    const double eps = 1e-7;
    ( X2 }( I- C3 i. j1 Z
    ( `' L+ d; l8 T( Qstruct tree {
    " F/ D5 {: r! Y    int l,r;1 u9 e1 |* Y4 U- O7 ^
        int p[10];
    # ?; ^" q; k5 z} t[maxn<<2];1 c3 k, Q: T/ {' [! g& Z; l: Y9 U
    % m2 |" d3 A- u# U$ M# a4 M4 y# b
    int l,n;+ A% W5 C6 @; n  Y1 s
    " ~$ W# F3 m8 A' H! S& G
    void build(int i,int l,int r) {
    9 o* V/ k) w$ Y    t.l = l;, |# P8 A7 Z# p) D: U2 x% q
        t.r = r;
    % ]0 j+ b& H4 @: {. k( q( A    mem(t.p,0);
    % T- w6 N0 J. ~$ W
    9 H/ {# _- Q+ }    if(l == r) return ;
    5 _) F2 n# f0 h7 I  X1 c    int mid = (l+r)>>1;3 _- d) o/ F; h% \9 e
        build(i<<1,l,mid);& q5 T& D9 n1 Z- i' c5 P
        build(i<<1|1,mid+1,r);! A5 o( A( i  ?" x3 n# i
        return ;% _9 y  K& b* x& o4 h
    }
    * b1 x8 l  K( y; G* W( K7 p: |' N
    ! A6 P/ g8 `6 t4 U5 {. kvoid update(int i) {$ X, \0 z7 {, k! ^- t: P
        int cnt1 = 0,cnt2 = 0;
    # u& r: O2 D! T% m    for(int j = 0;j< 8;j++) {
    3 A- J- r" |+ F5 I) N        if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {! J9 G9 Q: _$ I9 y# A/ f2 [! P
                t.p[j] = t[i<<1].p[cnt1];2 X; Y. l0 N% r6 f
                cnt1++;
    & e' W( Z/ _, Q" w* _        } else {
    0 g& u& V6 z* c- m, c            t.p[j] = t[i<<1|1].p[cnt2];8 m' Y, N) D3 C* I/ a; I
                cnt2++;
    * L( N4 ^; k# W8 b; y        }. B# O' |9 E/ P3 I
        }7 p$ A+ a* @6 r
        return ;$ X% _% j( E- v1 g/ _, z
    }
    $ P/ Z% [3 ?8 G8 \# o) m; R0 r* ^' ?
    void modify(int i,int pos,int val) {% z% Z4 V; p: b
        if(t.l> pos || t.r< pos) return ;2 a4 t- u/ A& d' q
        if(t.l == t.r) {) j' V0 j  J4 U6 F+ _, U
            t.p[0] = val;" w; {# k( E: F
            return ;
    & e7 J9 e  P. m7 j0 i. ?" q    }) L5 C, [! w, W+ O( d1 G3 U
        modify(i<<1,pos,val);
    1 H4 Y  u/ D. F4 j  @% z0 x    modify(i<<1|1,pos,val);; I' y. P! l) F+ e( [2 N: J8 C
        update(i);/ H% z! @' g0 V, H$ k! Q) \
        return ;
    ' |" [' E9 H' P}" n, h2 O6 A& s* g* [/ u+ J
    9 ]6 M- U1 q) Y, `( K! {$ O
    vector<int> merge(vector<int> ans1,vector<int> ans2) {
    8 r9 M# w) G: s    vector<int> ans;
    8 x/ h) _5 T* q    int cnt1 = 0,cnt2 = 0;3 r+ q) l: S% \* ?2 ?
        for(int j = 0;j< 8;j++) {
    . V8 B9 L8 q7 e3 i& S" v        if(ans1[cnt1]> ans2[cnt2]) {; {% ?2 d  G$ M! K0 V
                ans.push_back(ans1[cnt1]);$ ?7 x4 y- j+ c5 q6 }3 k
                cnt1++;4 u" e2 {; H7 K' P6 z# j& }/ }
            } else {- l7 T4 m$ Q/ v& q$ F
                ans.push_back(ans2[cnt2]);, R. h( ?; R8 \
                cnt2++;
    0 j# J( s/ X8 D% [        }
    " N$ j: m5 y+ C2 A7 c# |    }1 J6 a/ `+ {; |4 F& ]" g
        return ans;0 z+ U/ K; _4 F8 ?( R
    }
    / r" ]' p( _5 _$ P2 h
    5 y# }; m. A, ?  t9 I+ n  Hvector<int> query(int i,int l,int r) {7 a+ J$ {+ u, u. j
        vector<int> ans;- N0 U# G: F0 _3 N9 y
        if(t.l> r||t.r< l) {( g2 B) r& o. g7 T$ m/ n9 r0 h
            for(int j = 0;j< 8;j++) ans.push_back(0);
    " q& w3 A( [/ F4 {        return ans;
    4 A4 r' u! x9 Z) L; e$ @    }, f" O0 _/ I. g. A1 t1 C

    & N* y9 t7 b1 l    if(t.l>= l&&t.r<= r) {
    0 V% c" \8 n5 ~" E4 Q: Y9 \8 B        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    2 \% A3 l( r* h) G  H        return ans;
    . T0 f* U" G/ @# A    }
    - d' T* f2 A, M! w& ~
    . s6 t+ I" u: B6 |9 s! i    return merge(query(i<<1,l,r),query(i<<1|1,l,r));
    * M: h, V. N1 R9 Q" ^, n}
    4 G1 u' o3 [1 w) a  n5 @
    8 l4 f9 }5 L8 u3 V. J4 Xint main() {/ c+ B2 o; }6 o2 E) H. @
        cin>>l>>n;# O3 P* M& X& P7 M1 j
    " @7 B  @0 `6 U) x  _6 A! h
        build(1,1,l);/ D; S# t7 i4 s1 E
        char c;, {; n% h( o8 }, R
        int x,y;( ]% g4 ~- W# N% O
        while(n--) {
      f" J0 D% G' R4 E- X        scanf(" %c %d %d",&c,&x,&y);
    , }. i3 [( e5 |; U' t5 M        if(c == 'C') {9 ?5 O. d3 }: y8 z) W& V
                modify(1,x,y);' }3 g$ u# G# m3 n; P! O% ?
            } else {$ \) W9 E  a5 Q  Y7 `9 d
                if(y-x+1< 8) {4 J' @9 }+ T0 b% j7 U
                    printf("0\n");+ h* F' W1 S  b6 S6 P! u. H, a% c
                    continue;
      a2 y" x+ `6 l$ K  e: u            }& N9 g2 p5 q& K+ j/ m1 f
                vector<int> ans = query(1,x,y);# h" i0 h* F. |- W( ]
                printf("%d\n",ans[7]);: c1 t) h5 ^5 g
            }9 y" l! P! y$ F( {" P0 J$ B6 x6 j1 X0 Q
        }1 J7 p" ^; k  B/ ?( ~9 W" \( i
    8 n4 c4 E5 {5 S. ]9 s) W0 x3 r
        return 0;" b- [- B9 c, [- L# `- S
    }
    ) I7 ]; d. z$ m5 h; u5 z) T7 O! p1 e; |1 A6 |" M
    ---------------------
    5 A7 M3 o. e. E作者:nka_kun 7 C9 @! Y) u, X' a) l% @, }% t9 u/ ^0 B
    来源:CSDN
    ! h; P8 n! ?7 x/ }- U7 |0 d$ X, O4 \  o" k! T* f

    - z8 {7 m, v' Z3 a' n5 G& g! P
    5 f# C$ h3 [9 z
    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 14:44 , Processed in 0.341869 second(s), 51 queries .

    回顶部