QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2239|回复: 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组决赛题解第九题
    2 Y: h/ d; Y2 u8 o* k  q* |
    * _: ?/ P3 T( D+ \* Y& t

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)% \) f% I: y$ a- I  ?9 G+ z6 b
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    + T/ Y$ V5 T9 K查询的时候返回含有8个值得list,并不断merge

    代码:

    6 U/ ~( D& b% A. H/ ~6 y" x9 n
    #include<bits/stdc++.h>, O9 E3 ^7 n  o. S" e$ q
    #define mem(a,b) memset(a,b,sizeof(a))
    6 p# t0 n. P* ^6 Fusing namespace std;4 J/ @# ^/ P6 H3 Z
    typedef long long ll;6 g7 X' V# Q1 U. i; T
    const int inf = 0x3f3f3f3f;
      u3 X2 Y! d" s5 r' @8 F/ |const int maxn = 1e5+55555;
    # m, j  Y7 H7 t' @4 ~  N+ Z- v; uconst ll mod = 998244353;% L' \3 ~  z* ?, `2 ^6 U
    const double eps = 1e-7;0 R$ @) B* ~  J; ?: X$ R

    3 K! `. C& a7 F4 `- w% U  Bstruct tree {
    4 o( ?& Y% U2 k; \! L/ s/ Y* k    int l,r;
    / x5 E' ~4 H( ?    int p[10];8 h" _7 Y6 g( f( R1 e6 I3 p
    } t[maxn<<2];
    ' y- _0 I8 Y9 q* W6 y2 m" n+ V9 ~( ^
    int l,n;
    3 c+ i* d) q/ N$ s* L' i0 c% q5 Z  ~$ E% u
    void build(int i,int l,int r) {
    8 ~: K9 q9 B3 V( K: \/ \) @    t.l = l;% i& F6 Y$ G$ i! C
        t.r = r;
    ! p0 P" u, f$ s' r! {    mem(t.p,0);
    $ U) F2 M" X0 C, T3 n1 c; I
    " f+ {( p- G6 m9 r, D+ M* N    if(l == r) return ;" m: i9 \" o( n$ Z: z0 ?( H1 [
        int mid = (l+r)>>1;/ ?4 W, N) r" V% }; m: n3 ]
        build(i<<1,l,mid);9 `7 J, _* G$ z) q. x/ W& @4 W
        build(i<<1|1,mid+1,r);
    $ L' {0 G6 C2 p! b' G( _$ A6 t    return ;; ?: i" X" i. V9 j2 z4 k& j9 I, h, }
    }# J& p* h5 _. k: U7 E7 `! g0 f# }/ B4 g
    7 l. D1 ?0 {4 ~+ P* q9 G# o
    void update(int i) {7 u# Z& U- k5 U
        int cnt1 = 0,cnt2 = 0;
    1 v( S1 y4 k& C  f3 p6 G' r    for(int j = 0;j< 8;j++) {
    * m' M* e. p- M; V) j  M        if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {
    " [* Q5 Z: A" b( z            t.p[j] = t[i<<1].p[cnt1];( E: g  C  S$ O8 C( T$ _
                cnt1++;, N0 r7 h) c+ `. A/ i- C
            } else {  ?. ^. P5 X& W/ I( O: S
                t.p[j] = t[i<<1|1].p[cnt2];* X5 A1 h4 z* Z0 K- p  l# O* w
                cnt2++;* V, a5 {( O8 n  r
            }# l3 n7 T6 x  Q+ D
        }
    6 R8 M! Z8 o$ i. g    return ;' a3 H4 M3 |6 J% s% M6 {' J
    }
    & i# W1 z7 s* y1 {
    , K8 D+ v1 p. @+ \, P- @void modify(int i,int pos,int val) {( g  h. p0 q' s" h
        if(t.l> pos || t.r< pos) return ;
    - M9 ~/ g  U9 d6 H( d" k    if(t.l == t.r) {) \0 M1 a% I  o' m" y
            t.p[0] = val;6 \8 C% s. S+ ~3 v* u  h- [
            return ;
    ! T! s3 b/ k6 u) Y1 [+ b/ r    }
    3 S' P! _6 m) A  [$ |+ V5 ~    modify(i<<1,pos,val);
    . T+ x& g, d! T, g2 |) f2 [    modify(i<<1|1,pos,val);
    9 z8 y' G  q! e( |; O; q$ V5 f    update(i);
    3 ^/ \9 S0 W  \4 y1 T. J+ ?    return ;
    $ w; Y: o$ f8 H6 a( t9 j}
    # T3 _8 K' T3 ^4 x# B% k# h. l+ l  j' v. E' c
    vector<int> merge(vector<int> ans1,vector<int> ans2) {
    ! a" G, b$ N7 N. H, }4 F+ Y    vector<int> ans;
    . A) k# [/ V  A1 L# K    int cnt1 = 0,cnt2 = 0;
    8 U, H: Y; y: I' n: e    for(int j = 0;j< 8;j++) {$ Q9 N, `% ?# b0 ]4 Q$ i
            if(ans1[cnt1]> ans2[cnt2]) {
    ' i$ ]" ^1 e  p2 V" x            ans.push_back(ans1[cnt1]);
    ! k  B8 r0 ~- h. J            cnt1++;
    5 j0 M/ L! \/ L, I  r* L5 S        } else {5 ~% K0 Q2 z& ?" K9 F# k( o) A" i
                ans.push_back(ans2[cnt2]);
    ; F+ b; A% C) S# g' Z- K2 w) U            cnt2++;
    " s* x  i5 a& d. R1 c0 K0 O        }) ^8 Y2 a4 ?5 I5 F) ]2 l
        }# \5 B5 n" H2 K/ w1 t; R+ d- i
        return ans;
    $ n, }1 X  z7 s! G5 k' {}
    ) a6 y9 i& X' N5 d
    $ k6 L& z& s8 S6 b' `/ dvector<int> query(int i,int l,int r) {1 T& I& ^3 c- u8 w- h7 O0 T: H
        vector<int> ans;
    0 h$ X- b9 t; p- T# ^    if(t.l> r||t.r< l) {
    $ t9 {3 R8 Y1 P$ P8 P3 C        for(int j = 0;j< 8;j++) ans.push_back(0);
    . \1 O( u- a6 ^1 ~        return ans;: J. {% H" y6 T) @
        }) [" @9 P1 C8 m# I- M# B
    / X. }1 I2 x# n, f/ E
        if(t.l>= l&&t.r<= r) {+ l. q* {5 r+ ?' k% {; ]3 `
            for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);/ K1 S9 [$ t! k% N' d$ @
            return ans;& h0 [' Q4 u* j$ b
        }
    2 p& _1 y7 K0 f, E, Y
    4 D7 }$ Y' J! `7 ^    return merge(query(i<<1,l,r),query(i<<1|1,l,r));
    0 Y$ P4 P  Q" W" W: y( x}
    & `0 U4 C* X2 C$ B
    : y, B1 l. V" b% fint main() {3 u4 I) w: [+ C1 I" O! a& ^2 W8 A. m7 }$ @
        cin>>l>>n;
    " t- r5 \' j( ]& |& G5 t
    ) V9 h/ R6 a# ~2 Y# z8 y/ Z$ X    build(1,1,l);
    % }# U1 R( E  y7 J- F# u    char c;
    0 x7 D! B, ~/ j+ w    int x,y;$ d5 R2 }' e  K  S4 a7 U" r; }2 p
        while(n--) {
      r7 T. ]" n  p        scanf(" %c %d %d",&c,&x,&y);
    * ~( g: z* Q8 I' V        if(c == 'C') {
    + f) B% K5 X. L: w            modify(1,x,y);
    / U6 m7 s4 o( {        } else {
    : d+ Y4 q& a& {# O" v            if(y-x+1< 8) {' x; l* g2 y+ `# y$ u
                    printf("0\n");" u( \: j; j- \& v
                    continue;/ F" Z! O" j' d1 q; `' v
                }
    : P8 X9 ~+ Z- n% x* V" {& u. Z            vector<int> ans = query(1,x,y);* A& o( \: l" q" G" s9 v
                printf("%d\n",ans[7]);
    , R/ o" q$ M& ?. e' M        }" A# `: @) p0 v4 H1 |  v( _
        }
    / j/ W, C: ?3 b# X6 o+ ]0 Z# D% ], I; B
        return 0;
    ) i. E( C1 w" W6 r3 w  j}
    3 i5 Y7 A( g8 \$ S* v4 }1 r/ N" P' h3 S$ a$ _# ]* A3 l
    --------------------- + Y7 r( h1 x& G6 q) A: @5 C# @. |
    作者:nka_kun
    & |* Y4 x" _4 [2 |: G8 j. j* z来源:CSDN
    . X' g4 M1 N! Q7 ?& U6 E' `8 I' p8 W$ q! B0 T/ N1 L8 x
    ) g' C1 n" _3 [# z1 l' E3 Y) q' ^. X6 z
    $ o* x* M6 ^* [+ X8 c# K
    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 10:18 , Processed in 2.564365 second(s), 51 queries .

    回顶部