QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2238|回复: 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组决赛题解第九题
    " }$ Z( T8 }- y7 H
    / _; N3 e/ q, E/ v7 y4 I

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)5 q) B& i* Y0 O8 b* s/ E, @' O& }
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    ( q1 ]  N. n( F  k查询的时候返回含有8个值得list,并不断merge

    代码:


    0 f. {( h5 t3 t8 W  e6 d7 n- _#include<bits/stdc++.h>6 O1 d' ]. r1 q3 u0 S6 w0 y% S/ X5 F
    #define mem(a,b) memset(a,b,sizeof(a))
    ( \+ L* L# b6 H- u1 I& Tusing namespace std;
    0 g( b5 Z6 o% c# n. Atypedef long long ll;  Q" J: U  }7 r6 g  m
    const int inf = 0x3f3f3f3f;
    + E8 t2 [" T( A1 L% x+ U9 Kconst int maxn = 1e5+55555;
    ! [0 ?# C3 }/ v1 J- O: r; Bconst ll mod = 998244353;" e  b& Y# B$ c- z
    const double eps = 1e-7;) t8 l# p* q+ q

    1 X+ q5 y4 l  Dstruct tree {6 w, t. d% J2 q: n5 m0 y
        int l,r;
    * Z9 e6 R: l9 |    int p[10];2 [* `. s$ t7 Y3 x, Z% w8 X
    } t[maxn<<2];. E- `+ F2 `2 r8 d; Q/ \3 O

    0 D. m- T' Z4 Y+ r- n6 m9 m/ lint l,n;
    8 W7 d& @6 u! Z, `4 G
      g. }& x( U) Wvoid build(int i,int l,int r) {6 K$ A9 U/ w6 Y4 r, B( |
        t.l = l;- a8 e: }. C; x, s! Q; e: F% m; E* r- E
        t.r = r;
    2 }4 p5 q4 C3 R: q. N. |    mem(t.p,0);2 v6 w9 S. o% i1 p  j) u1 z, O
    9 ^! Q- H1 e% z) S# R9 l( c
        if(l == r) return ;
    / S$ ^7 \' F+ M2 |+ Q* j! w  E    int mid = (l+r)>>1;
    2 b. `5 S3 b" w0 `- k    build(i<<1,l,mid);& L% i+ d. a( G4 t+ l5 f4 R
        build(i<<1|1,mid+1,r);. ]. q' y$ ~; l0 e0 \, j
        return ;
    9 W  q. G! d( v- k}
    : s% t0 d# U9 d# B0 B* ]  ^6 a( g/ C2 h+ B/ k5 e
    void update(int i) {9 E" ^8 g& I/ d1 g
        int cnt1 = 0,cnt2 = 0;
    ! P, ]. p* L1 s& @) p9 q    for(int j = 0;j< 8;j++) {9 j4 k: L, l9 _2 K9 w$ n$ P8 f
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {/ t% R0 `( ]6 g' p# Q8 @4 R' r" F
                t.p[j] = t[i<<1].p[cnt1];
    & `. p* q0 f3 B4 u9 @& g9 u            cnt1++;
    ' y2 J+ G  A0 L: e) C) i' C6 M        } else {
    5 e' Q; r' a' M, r            t.p[j] = t[i<<1|1].p[cnt2];% R0 e. [5 m; b1 Z, Z
                cnt2++;# \; t5 J# m$ C0 x
            }
    ' F3 x+ l% s8 G    }9 h3 ~+ m+ i* V2 s/ J
        return ;! d. O; A  d8 s( }% e1 D1 e
    }
    & k7 g( g1 i% o3 D
    4 d: Q2 b) v0 avoid modify(int i,int pos,int val) {
    + K# l$ U5 D1 V* A4 k) U    if(t.l> pos || t.r< pos) return ;
    8 T; j  ~& E8 s* X$ E    if(t.l == t.r) {9 N4 `% {- _' U4 G! c) {0 Q7 d# i* D
            t.p[0] = val;
    & `7 z4 Z# }0 I. M        return ;8 U1 H6 @: `0 }& D" F
        }4 f: E& L8 G2 V6 h* C
        modify(i<<1,pos,val);
    2 o9 S: h% _- s9 z9 i" n. v; N    modify(i<<1|1,pos,val);7 f. v8 N! ?6 y4 w) _
        update(i);
    ' E3 ?% b- t3 I2 }    return ;
    ) }0 g/ Y5 y, F- n5 r}
    / l/ x% C/ k1 j0 A; j# ~" o9 u3 i: H" O! I$ `% e
    vector<int> merge(vector<int> ans1,vector<int> ans2) {- n* J* z% `8 M/ Z( C8 K
        vector<int> ans;. z- C5 T  [. ^9 T/ T7 ?; X
        int cnt1 = 0,cnt2 = 0;
    0 E  ^( N7 Q/ L8 E$ t$ J& X    for(int j = 0;j< 8;j++) {( I2 E; t/ ]1 f2 j; j
            if(ans1[cnt1]> ans2[cnt2]) {4 @) O. ~% q: _5 d
                ans.push_back(ans1[cnt1]);
    . k6 ~2 x  c  s9 V            cnt1++;2 C2 A7 X* I( T1 G$ i4 J0 W
            } else {+ s# \% x1 c& R: `% m4 s3 r
                ans.push_back(ans2[cnt2]);
    ! t2 Q+ l; c1 Q9 R2 m            cnt2++;  q! m/ q; V- G
            }
    ) S+ Q+ m; R7 H  {5 Y    }; O3 c# {# y# }4 {  X- h$ ?4 `
        return ans;
    # Y& a  C& _8 H6 f  k}
    8 H6 |8 c; j% }" w8 w
    ; N; `* }5 e2 C1 Nvector<int> query(int i,int l,int r) {
    $ g& j; Q0 [" C' y9 \' @    vector<int> ans;
    9 \' u5 p* G& p2 t- a8 L$ e    if(t.l> r||t.r< l) {
    3 e: @3 y) Z4 A. N! T        for(int j = 0;j< 8;j++) ans.push_back(0);) z7 V, f1 `  R8 `
            return ans;
    % G, Q& S% s( k4 @( E5 ?6 E0 |6 ~    }" |6 H) u, }: Q# i0 c
    * D" P  S" F' A! ^( @$ t# _0 z
        if(t.l>= l&&t.r<= r) {
    8 I& _6 n* B3 l  C" q  ]& n. j        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    ! I% C# x# N& {$ m: n) e        return ans;, V4 c! z$ l( e; O6 ~( z
        }2 o. ^$ i5 U2 f" k( r/ o
    / J4 L1 {# @. q$ R1 x" u
        return merge(query(i<<1,l,r),query(i<<1|1,l,r));
    3 \1 ?3 Z" F0 ?3 X}
    8 Q& S3 k. y, g- f4 o( @  L
    9 R. ~0 l9 \' v/ ]% Hint main() {
    9 J2 Q* F, K0 g6 R4 Z0 t  e    cin>>l>>n;
    - L! A. d/ r, r* }
    / \! F# R$ J) O# o    build(1,1,l);
    5 o- F1 h, L: z! A2 `6 [" o2 R    char c;
    7 |5 n+ \( \* \/ Q' }9 x- x  S4 t    int x,y;
    : L: f% g) h: d) M8 Y5 {5 `    while(n--) {
    ! T1 A5 L% Y1 ~. i        scanf(" %c %d %d",&c,&x,&y);5 O( y2 {& M$ A  z, n9 u6 }; q
            if(c == 'C') {
    4 j( y: S$ J& s; ?% m6 l) Y            modify(1,x,y);
    + f/ w& b& v9 X/ a( L        } else {, a; j' K* j1 @9 B
                if(y-x+1< 8) {% P  K. v! O$ z4 h$ ^0 |& G
                    printf("0\n");# Z; v, V# R5 C. m9 l' b# }. H
                    continue;! f5 M% ]" l0 v: a  I8 V( s
                }6 f0 z- D& F2 j; l1 t
                vector<int> ans = query(1,x,y);5 v9 R# P7 y0 s3 K3 g7 s
                printf("%d\n",ans[7]);! T9 @3 {( V( t/ I2 d4 u5 I
            }
    * C& M; h# ]$ F3 h" T* d0 d8 {! H    }7 ~* f' G+ N5 u3 @3 B
    3 C( r: d& c! Z+ x" K5 [+ G6 w
        return 0;
    * e5 o+ s' k' a}
    ( S+ B$ O" |+ l; \2 J* D! J5 a2 |3 A) Q+ d' r) n( J  i3 x
    ---------------------
    * j! S8 h$ ]4 o, r9 W& k/ F作者:nka_kun
    1 y. y! V: p6 }) ?来源:CSDN + S, I2 ?& m; ?% a- d
    5 w% y- o4 c9 U1 W% x* }* i8 e

    " C3 F- g; d3 i% ]' I* h2 ^9 F& ], Z, \0 i( `0 M
    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-4-18 01:36 , Processed in 0.252901 second(s), 52 queries .

    回顶部