QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2268|回复: 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组决赛题解第九题
    7 k2 x1 Y: Q# A( E: p1 f8 X; U0 I2 j' X3 A; P* a& n

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)! u) N/ D8 u9 B( s% f
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    ! \5 H5 o, S3 ?- ]& |! S查询的时候返回含有8个值得list,并不断merge

    代码:


    7 F, n7 n, p* z% Y+ C$ f  D) t#include<bits/stdc++.h>% ~6 a  ^6 ]8 [$ ], K8 J
    #define mem(a,b) memset(a,b,sizeof(a))
    % E3 h# T( c2 W" e+ I3 h3 D' ausing namespace std;/ F8 D9 R- U; k5 q1 q6 N
    typedef long long ll;
    & @# J$ h) n! r' ]5 F0 Q3 @const int inf = 0x3f3f3f3f;
    0 m1 \( {$ l% n# k5 d8 Iconst int maxn = 1e5+55555;
      ^. [2 d- Z2 l: J1 f* |' G$ X. dconst ll mod = 998244353;
    6 a1 V5 e  d. l+ P. v, Bconst double eps = 1e-7;, ~9 N' U2 g7 L8 o2 U7 s
    ; z2 v: M+ x! A* J
    struct tree {( F8 {* ?( v  \/ Y2 o1 C& [
        int l,r;  _$ Z; t8 }" H
        int p[10];+ Z1 Y8 [3 r, X- I$ \3 N; @2 }
    } t[maxn<<2];
    5 J$ V) k( d% t3 F6 b2 K' f8 j3 h5 u/ M" r7 z
    int l,n;
    / W, l$ w3 v5 A  k6 K, b7 P' f
    3 s/ O* |/ H5 J: Z4 R6 cvoid build(int i,int l,int r) {
    2 A9 c, E. ?% a4 z% J    t.l = l;
    ' @3 V5 a6 v; \- W( a    t.r = r;
    # w$ S5 S# O  {    mem(t.p,0);' t& d( V0 Y  {. Z3 m  L

    ( F: z+ O! B+ W    if(l == r) return ;% A3 t7 ], Q8 y  R" T
        int mid = (l+r)>>1;$ e/ ?4 i1 m/ B/ K6 V+ R
        build(i<<1,l,mid);+ s3 o, S& f6 ]  }/ S
        build(i<<1|1,mid+1,r);
    ) C6 A: k( U' t" |    return ;
    . t' u; @. ~3 h4 n* T}1 ~% ~- o+ [/ c

    - X$ f! h2 A3 N. P% ]/ f5 v/ qvoid update(int i) {
    # B1 E+ m+ J1 ^3 D    int cnt1 = 0,cnt2 = 0;
    # b- X: k8 i% d6 k    for(int j = 0;j< 8;j++) {7 P8 ~. l; |" e7 }8 y3 T+ |/ ]6 R
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {$ G* T2 U5 K" O: V/ B
                t.p[j] = t[i<<1].p[cnt1];
    - e8 V+ y' F# C0 P8 S6 o" j7 V3 I            cnt1++;
    3 k) i" f! l( E- f9 C4 B        } else {$ {9 g* P& |) {2 _. P
                t.p[j] = t[i<<1|1].p[cnt2];8 ^1 D% ~0 V% f, {) a4 }3 d3 r
                cnt2++;8 C& I  l  a. t9 B2 K+ {+ q
            }8 f" k/ i! n) B- T
        }
    9 B3 \, f6 P5 g+ H6 y    return ;
    8 N  z) X- m+ V: w" M% |+ ?( w0 {7 o}
    6 J* X% B+ a; `, Z- b, `5 a
    + R' z5 e% C! ~7 |2 xvoid modify(int i,int pos,int val) {
    ( e. E: P' T. _9 ^# [5 ?% C    if(t.l> pos || t.r< pos) return ;
    : R7 a- a. |6 D+ p$ {# N3 x    if(t.l == t.r) {- x6 A% C1 x6 n5 V7 o9 x
            t.p[0] = val;7 w5 S' S; {4 `& f2 B
            return ;
    & _9 ~1 {( ~8 M- x- E    }/ c: }# d# o: w. p! k: N
        modify(i<<1,pos,val);* ]0 d: t; z2 D/ O$ h- V4 G" D
        modify(i<<1|1,pos,val);
    / ~! B: P- _9 H  Z. v    update(i);
    $ O4 I# y: T- _    return ;
    ( {0 Z4 p8 n7 O7 S}
    8 S! ?! a2 }( d6 k7 M3 s% l( K8 w; K# |
    1 |% s1 P# {& L2 n9 A- W8 jvector<int> merge(vector<int> ans1,vector<int> ans2) {
    " i# s2 `% e: u6 X    vector<int> ans;  W9 Q$ p7 G" l9 Y; O, F7 t
        int cnt1 = 0,cnt2 = 0;- q! b! h1 ]0 r
        for(int j = 0;j< 8;j++) {& [, S& |. E2 [$ e* c. H3 [
            if(ans1[cnt1]> ans2[cnt2]) {3 l2 o7 t4 n. x, C0 {0 x
                ans.push_back(ans1[cnt1]);* j- k; D% }4 ?. |
                cnt1++;/ e8 B  ~2 x0 n/ g; x3 _3 K
            } else {
    : l: u5 R' t( N+ Z/ m% }( ~            ans.push_back(ans2[cnt2]);8 ^# F! k  N9 {) U6 h; `7 {/ K
                cnt2++;
    % A) b) `6 v' P% Q, l! N        }
    ' O! s* j" f/ o# \- N    }
    5 i4 Q; [# k) w# Y    return ans;
    ) x4 ]% x2 d6 ^- e}
    4 a' I) h  t- z; y+ y' `, w8 Q5 F/ F2 R1 h
    vector<int> query(int i,int l,int r) {+ a: I! r+ ]$ C' N8 W
        vector<int> ans;
    3 \% {, r+ r) I& A& y" [2 R    if(t.l> r||t.r< l) {
    " w  O/ V  P3 H- q& z5 }$ G        for(int j = 0;j< 8;j++) ans.push_back(0);
    / H! C  e5 A7 r# A4 A: P+ R        return ans;. ]1 ^: @' b/ _
        }
    ) s+ @1 E. [' O# O$ P( E- n1 [9 ^! ?1 [9 Q
        if(t.l>= l&&t.r<= r) {8 v- P( E# q+ P0 R0 F- V% w
            for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);9 G! }* n/ c6 z
            return ans;
    3 t  Y+ {, G& b    }1 F3 P+ w/ y! C. |7 G! G; k
    0 p4 L1 K/ h6 T7 [3 ~$ [
        return merge(query(i<<1,l,r),query(i<<1|1,l,r));/ A$ f3 f) ]. s8 G! z
    }; g6 x/ {/ }+ p2 F( B; G5 k

    / ~; z0 a- L4 z. l& Aint main() {
    ) N, C7 n4 j9 u( w    cin>>l>>n;
    ; v8 \6 d1 ]: y1 h
    1 r  U# z: F$ K/ I0 a$ x    build(1,1,l);
    ! u/ K1 m) k( q, x) r    char c;
    ' @3 D+ b  I# V  {7 G* p    int x,y;
    # e6 l5 O7 G% W$ k) a    while(n--) {2 F8 l$ a1 _4 O+ ^
            scanf(" %c %d %d",&c,&x,&y);
    & `. L' e5 K* V' z) E        if(c == 'C') {
    ) q) A. h" m) K. f" [            modify(1,x,y);
    9 T" [% K" e4 X; m3 l        } else {1 H2 m5 p0 ?& a- y7 [# D7 e7 x
                if(y-x+1< 8) {  H  |- {) L! ?" G/ E7 |
                    printf("0\n");
    % v9 B+ \/ w; r                continue;% V$ T; h. Y  H- `% P$ h
                }
    3 O% Z3 B3 G* d. ]# ]& o; B  \1 ^            vector<int> ans = query(1,x,y);2 Q. ^: P3 ~. a) U2 M
                printf("%d\n",ans[7]);
    * S3 ?0 g4 F4 t* {9 B        }6 t9 c/ e; \' _: ^& l
        }4 ]; d1 w4 L9 K! c

    , d9 Y( W7 n- I+ j* T    return 0;
    4 l1 W. m& ~" e% s}  |' a8 \4 A% N) n! V

    2 V& |) q$ v3 G  }" Q# @--------------------- . i: d! S$ E. X6 z6 m& b
    作者:nka_kun
    * G6 p9 S! x6 U来源:CSDN ; d) d" p8 W* m1 B

    ) U  V, K) ]# H, Z
    3 J- g# ~7 |1 c& R* G4 h; z& V: i/ _  s* k6 M) H/ C
    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 03:17 , Processed in 0.364723 second(s), 51 queries .

    回顶部