QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2322|回复: 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组决赛题解第九题# S4 p) A$ @! o' M7 ?

    6 V' H( p) G2 T( Z

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)/ D% |2 X) \9 x/ W+ _% t
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    9 O5 @- ?' K+ _4 G# Q0 u  ^# e查询的时候返回含有8个值得list,并不断merge

    代码:

    / }9 }3 C) f! O0 y
    #include<bits/stdc++.h>
    & R% s' n! j) _5 `1 q#define mem(a,b) memset(a,b,sizeof(a))
    ' {0 ^- s+ {/ b9 O! s; l- |using namespace std;' {5 e" S0 T3 E: N0 \  [
    typedef long long ll;
    1 n0 z4 G1 g$ N% uconst int inf = 0x3f3f3f3f;* Z' q5 n5 D" ~& D
    const int maxn = 1e5+55555;" _) ?3 g. t8 `2 m6 `4 Y/ u+ S
    const ll mod = 998244353;1 a2 k  N# }% J4 w( H9 C" M) w; c$ K
    const double eps = 1e-7;2 m+ N, d1 K/ M  k: ]! H5 ]
    " ?8 X- V! J/ Y0 _2 Z+ a
    struct tree {: g* J9 H5 e$ O; }( w
        int l,r;7 E' v) ?$ r, J8 R
        int p[10];8 G7 e/ O: T0 L( _9 S  n0 N! E
    } t[maxn<<2];
    / ~5 o1 @) p/ Y* `5 [0 r# p1 P# {' d1 K5 p! E3 r& I( @2 ^6 k4 X
    int l,n;# s4 L% I) o9 {4 j% M  R" a

    5 |# P3 Y( e. t& M2 i  `& [void build(int i,int l,int r) {
    * Y; a9 D3 e2 k* z! m8 z: N    t.l = l;+ @: H3 a" a% s- {7 I
        t.r = r;3 K7 u! {; d$ z5 ]
        mem(t.p,0);
    6 j+ T, q' B, y3 A- W8 o: G
    6 @' v5 G. j0 a- [/ G, L    if(l == r) return ;0 a; J; O( Z+ d& j0 B3 t
        int mid = (l+r)>>1;' X/ g. w5 L+ ~2 c
        build(i<<1,l,mid);2 _- r' W1 Z* x# `9 P
        build(i<<1|1,mid+1,r);
    * Q5 r' m1 E' u" r7 G6 g    return ;3 F/ Y! Q. k: S: q  b
    }, K: F+ |) D; |' U: {
    & Q& m! o& j5 S
    void update(int i) {- J$ W3 Y: V/ A/ s" z! Q* `& \
        int cnt1 = 0,cnt2 = 0;4 m; D4 N0 o+ U. O, w$ M7 A
        for(int j = 0;j< 8;j++) {: L* ~3 t; B7 i2 F& w1 |
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {
    6 l) b' N* a' N6 h            t.p[j] = t[i<<1].p[cnt1];
    $ m0 B0 W  w$ i7 G. H            cnt1++;
    ' p. q! {* i* T4 R! C7 N" Y& M  e! \* g        } else {
    0 y3 h+ j) Y6 I, B            t.p[j] = t[i<<1|1].p[cnt2];
    ! ~# L( }; b: f7 x: `6 g            cnt2++;' H: v1 Z$ [$ c
            }  P5 r- l$ X+ l
        }
    8 N/ A' {  g2 C  x    return ;
    0 s* q, Q3 F5 M  P/ ^: t}
    $ E2 {5 o: F$ H( G# k
    ) ~! ]0 r9 a: Z3 |6 evoid modify(int i,int pos,int val) {
    4 d, u0 ~, D) e7 a7 F( ]    if(t.l> pos || t.r< pos) return ;
    " c- L; F0 P' E0 M    if(t.l == t.r) {
    8 C+ v2 B9 {( l$ w8 N3 N9 Y' U3 g        t.p[0] = val;
    $ A. d, t; S8 [% X, q2 Y( B1 C: y        return ;
    # t- G: ]# k$ \9 g    }
    ) A" `  B7 A' D( I- {3 q8 ^    modify(i<<1,pos,val);
    # Q  k0 a* T- ^" H% Y9 @- c" a0 k    modify(i<<1|1,pos,val);
    - ^/ n3 U0 E6 k6 [) ~    update(i);
    6 v  L* a; h) U; w: ?- Q6 K    return ;3 s  o2 k. c3 G0 }- h! I
    }
    1 Y8 F$ y: O, b% e+ ~, j6 W6 f4 X% K  K& `
    vector<int> merge(vector<int> ans1,vector<int> ans2) {
    ( i, ]7 `3 z' N8 \    vector<int> ans;7 c+ y1 v; k" h, U/ ?
        int cnt1 = 0,cnt2 = 0;' D, U" V% `5 x2 i3 m
        for(int j = 0;j< 8;j++) {
    ( N7 K5 n9 a9 R' u  r3 v1 C        if(ans1[cnt1]> ans2[cnt2]) {0 }! z7 L% F+ v! k7 A
                ans.push_back(ans1[cnt1]);
    1 {: C; H# E: L9 C5 c            cnt1++;
    0 f) w/ u& A9 x% v        } else {6 I( \0 t) F' X% u7 h  N
                ans.push_back(ans2[cnt2]);
    4 W7 l* }. O4 e: g            cnt2++;; }! D7 o& U. d$ Q! @* `
            }
    ( J- V' W3 G# h( w    }3 c- x1 B1 c, o, M7 z- }5 w1 x
        return ans;
    6 [/ z$ o2 z* J6 H}
    / [2 x$ v1 v4 t6 l; ?: w
    & i% n. p5 g( Y( r+ Svector<int> query(int i,int l,int r) {6 g9 k. k! i: }* z, W! h
        vector<int> ans;
    5 [5 D8 o/ S' @0 y$ H, v: _    if(t.l> r||t.r< l) {
    9 N2 e, n0 F; _# S        for(int j = 0;j< 8;j++) ans.push_back(0);
    - ~! z* @6 k9 r8 d! d        return ans;
    : X# }5 `, q- ~- {: t3 c    }5 V7 z: B2 b: P& I+ i( t+ P
    # p. h- {! R* g$ g* s& I: ~
        if(t.l>= l&&t.r<= r) {! J+ q; b3 a3 E+ w4 m, k( C7 E
            for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);8 e: R* q! b  Y# J0 {- x
            return ans;* C% {% u  H* j/ @- k6 K
        }; l7 P/ N% }: I3 n/ [
    ( A$ ~- ]% u0 C5 z7 z% H
        return merge(query(i<<1,l,r),query(i<<1|1,l,r));" ?" {# W: `* a; _) ^& r
    }. Z8 M' Z! \$ D9 S1 g1 ?, a
    : t* S7 N' k  a) b4 m
    int main() {# ^( e: \9 J* w. X
        cin>>l>>n;
    1 `; i' s$ ?' l. Y& u; C4 n  V5 R/ Q$ O% a% a5 V5 O
        build(1,1,l);2 n; N$ P1 T+ {) i5 e
        char c;
    6 E) c+ J3 F& \" I5 M    int x,y;% x+ m# {, D) p5 f: k5 f# z
        while(n--) {# H. L3 R8 W5 n1 K
            scanf(" %c %d %d",&c,&x,&y);
    8 b) p2 p3 L9 n, d& M: ]6 y, }        if(c == 'C') {" x4 R2 _) [) `, O; V6 t
                modify(1,x,y);. ^: [8 X5 f0 ]; H3 l9 h, a
            } else {! b8 Q* v; W, x. z2 j' S, E
                if(y-x+1< 8) {
    " o$ |' @. g: D( D; ?5 N1 S                printf("0\n");) }% i. I. t+ j: E
                    continue;
    : S) [: j- S9 v! q            }
    6 L( k1 y& `4 ^+ H9 N            vector<int> ans = query(1,x,y);0 }$ H" R6 D+ w+ G1 F
                printf("%d\n",ans[7]);
    9 v& D* l/ {+ y        }% }) ~* G4 Q$ s# a2 [' S2 m
        }
    , i1 B) E* l5 ~+ M- y( P; [3 f4 Q  O+ P8 F& Q) F* ]" t
        return 0;: K! @+ s' Y0 i  }8 B
    }
    ! U# |) u. ~3 l' d! g2 \* Q) g: W* j
    ---------------------
    8 t/ U6 x! t( Y7 z作者:nka_kun - l5 r3 j* d9 H- u' X) d- C, |1 N
    来源:CSDN $ y& X8 v# c4 M  Y* I( d

    # [$ |- R' l6 f# ^
    ! d: e; x5 l) Z0 l; p0 @
    : ]% X1 ?! h4 P$ J5 S7 T" [- O  H
    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-7-31 14:52 , Processed in 0.519185 second(s), 55 queries .

    回顶部