QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2386|回复: 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组决赛题解第九题
    - L1 k' {7 O7 j/ F6 G0 n8 y
    0 I  J9 H* p: s/ b# _

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)
    ! B0 [' c! P5 Z) a4 t每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8' P1 n* u; A5 j- _3 f
    查询的时候返回含有8个值得list,并不断merge

    代码:


    ; [0 i0 n2 M2 u  F4 B, u#include<bits/stdc++.h>
    ; h: g0 t$ s6 g9 f  y#define mem(a,b) memset(a,b,sizeof(a))0 T3 L* z) g0 T' K" r) C7 o0 |
    using namespace std;
    7 @) ]4 [) j% z, g' y' {typedef long long ll;% {; i  O- R; q; N3 H
    const int inf = 0x3f3f3f3f;! z0 I  a  y. u
    const int maxn = 1e5+55555;: d' N/ `0 [( Q
    const ll mod = 998244353;
    ( \3 R# W5 L" n9 jconst double eps = 1e-7;
    ! \" ?% p6 U3 s. n! P- ~1 k
    : L- @9 P$ w* v8 q* i' ]- Zstruct tree {0 @) @4 a- [, r# y- Q+ u
        int l,r;5 p. T! N4 @5 p: C8 [, F
        int p[10];' o/ q: f+ l' c+ B+ ^$ M0 ?
    } t[maxn<<2];
    " \6 M/ z# }/ G( k, T& I
    4 E5 h; M% e# a1 I* g. f0 fint l,n;6 y0 |7 q0 T+ \# J" S8 j. n, w
    / G3 |8 ?) S/ x6 r: s& T
    void build(int i,int l,int r) {; W+ B* N# y) A" d, \# X
        t.l = l;
    : V4 A( T5 q! ^4 y$ m; K1 l* R    t.r = r;0 ]1 @0 N4 Q3 V3 p
        mem(t.p,0);
    - U. O- B9 _7 p# Z# p5 |+ X+ g- f/ O; X8 l4 N/ p
        if(l == r) return ;
    ( f* }: _9 F4 C1 V; ]    int mid = (l+r)>>1;
    " k- B* @0 U8 z% w) Z9 E9 W, Q. g0 F    build(i<<1,l,mid);
    . |* O6 w) d% [$ B( Y    build(i<<1|1,mid+1,r);) O7 r2 D: U. |8 Q5 Z. \' a/ J: x
        return ;
    2 X# x  o% y! v5 p}0 g; {. R! r7 i- Z& i
    7 Q! j5 c" w& u9 L; L1 g
    void update(int i) {
      J% y/ V4 R# f& ?* I9 x4 \5 R7 c    int cnt1 = 0,cnt2 = 0;+ @$ ?; g) @+ V6 B
        for(int j = 0;j< 8;j++) {  {8 v8 G1 z) @8 F
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {  O" m; b: }; b" M& _8 S0 X
                t.p[j] = t[i<<1].p[cnt1];
    # Q$ ]7 ?$ ~' T8 G6 ]            cnt1++;7 {# z: ]; x) ~% Y9 g
            } else {* F( v" D, L+ i5 A# b* o9 l/ r, S) [
                t.p[j] = t[i<<1|1].p[cnt2];, f2 d4 H$ l4 |6 r8 l# n
                cnt2++;
    + _0 R) s* K* U4 t1 x        }
    1 Z+ E. u5 Y7 E0 \0 O0 D/ x4 Z    }9 ^  O! G* F+ I
        return ;$ s& p4 o* P9 ], j
    }
    # p  e9 h5 o5 V6 C6 M8 l5 T
    " c0 l" H4 ^+ w( ^void modify(int i,int pos,int val) {
    ; P# r# E( M' i- v: H    if(t.l> pos || t.r< pos) return ;
    ; b* d) s7 p* C6 C; R8 k    if(t.l == t.r) {5 d/ ~* ^  x4 O
            t.p[0] = val;
    2 W3 g8 O0 `6 \* {- R+ K7 B; K        return ;! y; F$ k* L; [3 t2 R
        }7 x" u0 K$ U* n) N2 d
        modify(i<<1,pos,val);
    " b3 ?( F- d" `8 z! p6 h% `& d    modify(i<<1|1,pos,val);: n- A' M4 [7 f$ j0 e' r1 I
        update(i);; H5 u, q* ~6 t3 R% m, k5 u
        return ;
    # w4 e; Y! c! y: a, p}3 D2 i* ]; `9 p1 K' [

    ) G, U, b. Z2 z* fvector<int> merge(vector<int> ans1,vector<int> ans2) {) G4 i" d6 o2 z6 k. J& z! s
        vector<int> ans;! a+ z1 \. G! F8 T+ ~4 u
        int cnt1 = 0,cnt2 = 0;* _% }7 r+ H  v6 @
        for(int j = 0;j< 8;j++) {: ^, B. P1 G! l/ Y& a4 a1 H
            if(ans1[cnt1]> ans2[cnt2]) {) z3 l* `( }8 N7 h# ^1 x
                ans.push_back(ans1[cnt1]);
    6 o; K: z2 I7 p2 O5 G# Y            cnt1++;
    + r7 c. B/ V3 D: T) u6 N2 l9 z        } else {
    $ h, J3 K% A' |            ans.push_back(ans2[cnt2]);
    # l# B" l8 G2 f/ A9 s$ |  b1 I. {            cnt2++;
    ( \2 |+ v, V. y/ _" R' K        }
    6 p% n7 F" p! u' t; b' N    }
    1 [7 T6 C0 E/ {8 L. i9 k    return ans;" h, @: m# f6 p. r, ~. J8 s% K
    }
    ; Q! p6 M1 q7 @4 p6 h0 q
    2 b* P( @/ ]6 z% H; M2 R8 x% cvector<int> query(int i,int l,int r) {) I' |) O/ I6 K: t$ ~: p
        vector<int> ans;
    * i; o0 i" p9 Y9 M+ r    if(t.l> r||t.r< l) {
    : V0 a) E" g7 b- A9 j        for(int j = 0;j< 8;j++) ans.push_back(0);* \3 l: Z* g/ g! p2 I0 Z4 t3 Q
            return ans;
    4 b7 u  u+ F7 J$ _/ D0 q    }
    9 m, \. N: I9 s- a2 l+ m9 F9 v3 M+ F
        if(t.l>= l&&t.r<= r) {6 d4 T0 k/ C7 X& D) V+ D
            for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);, |$ Z0 J: M) u" u; o& r
            return ans;4 s# m: g/ A' j  _. u
        }
    + ^! w3 T, {: Z( q7 g
    4 V  i4 R  ]- ]2 W& F4 z4 k7 n    return merge(query(i<<1,l,r),query(i<<1|1,l,r));$ Y1 t5 |+ `, ~3 s' m- e( l
    }
    ) M& l5 ]6 s. P+ `/ A2 i! r' H* p) W
    ' C" F1 ?2 {- W" h! }6 qint main() {
    " ~4 P: D3 o1 U: l1 t  T. U, R* N    cin>>l>>n;! I5 e5 ~: J' D* B; h

    . L3 @2 ~$ U% p  {3 k! _& }    build(1,1,l);
    - M' e5 y# ]' j  \3 e- M4 y2 [    char c;% }4 `/ D& L3 W. n3 x/ x
        int x,y;
    2 T2 e8 l* b% q3 K1 o5 L3 g( p    while(n--) {
    ( P" j: z+ }+ }        scanf(" %c %d %d",&c,&x,&y);, n% V' T2 Z2 V  f* K+ P. |
            if(c == 'C') {
    ) z% w( K. [0 Z# g/ p8 V            modify(1,x,y);
    ; [1 f' a, R2 I: [$ ]. B        } else {
    ! l! y( E) h1 B6 o  H            if(y-x+1< 8) {
    : K! `  X& x8 h* y: {- V' r                printf("0\n");
    % r3 E: D0 J# j                continue;
    4 M0 @4 u. n+ a; X: o            }" o; x5 c  ?) @7 N8 {1 Y! ]9 ^
                vector<int> ans = query(1,x,y);
    ( Q2 a+ _! C, V2 C. P4 y            printf("%d\n",ans[7]);  T$ u0 J0 m" H2 |" k$ x
            }
    8 `" R1 z* A7 O# J/ |# b, t, e3 e    }3 d( ?4 b: T) W
    " O$ U0 T7 i4 p1 ]( r3 J
        return 0;
    , {3 _' e7 R# p}4 S1 D+ U) ^# b% z0 L7 \0 S" N
    0 g8 F& q- R9 v
    ---------------------
    ' Z0 S* v/ J2 L" a: E作者:nka_kun " Q8 B- m/ L; ~
    来源:CSDN 2 S  {. [& }, o+ K) T% m

    % {6 V( {2 R3 {5 `1 q1 ^' l& X! S7 a$ h, H4 @- x& I
    / O; a" d. Z- e- \, d
    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 17:27 , Processed in 1.162872 second(s), 50 queries .

    回顶部