QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2312|回复: 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组决赛题解第九题
    & g; a/ F5 x9 X( F. Y0 a( `8 j# P# I& r. ~8 h, G# _

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)" M) Q6 G# ], z/ ^$ ^5 t
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8; {9 E, {) J  d8 P* L# k+ m
    查询的时候返回含有8个值得list,并不断merge

    代码:


    0 v/ v6 g# |/ W#include<bits/stdc++.h>$ `8 G% a+ ^9 v- j3 v5 i
    #define mem(a,b) memset(a,b,sizeof(a))
    3 d% T+ y1 b1 {1 X, K+ x& Pusing namespace std;8 u& m: k  F' Y: g
    typedef long long ll;7 T! f  C) f% }& O
    const int inf = 0x3f3f3f3f;
    : I% u' D9 W4 X8 j6 ^const int maxn = 1e5+55555;
    8 T4 X, j6 i  j3 I3 W! F# ]const ll mod = 998244353;% B4 a+ O% N5 y1 |
    const double eps = 1e-7;
    ; p+ x  _0 s0 A! e; r: {) O; i; |) h' z; D
    struct tree {
    / b' u: W( H) Q9 n% F) _    int l,r;5 N* K. A5 c$ M( q% \
        int p[10];# [+ a3 ^7 Y" g; S( W! Y
    } t[maxn<<2];5 F" z8 }) @" W. ]0 p2 a

    . Y' o/ F$ H4 Tint l,n;
    % E2 Y; J4 a) Q0 N1 Y* y0 c; m. @/ c, T5 b4 ?4 Y6 `
    void build(int i,int l,int r) {, G6 H, c  D1 J2 |/ {4 b& I' G! d; U
        t.l = l;" u9 f3 B% |; o1 H" {) d! b
        t.r = r;
    . O2 v3 x' f/ u    mem(t.p,0);
    9 r$ i, L, P7 Q  O, \3 h! v2 w' ^) |, \5 u
        if(l == r) return ;% J+ f# v- e3 @$ B
        int mid = (l+r)>>1;
    . B( E& ?, D( e5 b8 {! D- O) K8 ~& J    build(i<<1,l,mid);; z6 c1 m: ~- Q4 o5 B
        build(i<<1|1,mid+1,r);
    + v4 m! x6 K5 T" a7 Y) ?    return ;
    . M3 k2 u# r' e% a}
    / V5 O: f% O; z6 ~% u, Q! \- v) b8 b! ^* |7 y, ~
    void update(int i) {* w8 j$ [5 }1 U; @6 ^& z& V
        int cnt1 = 0,cnt2 = 0;
    ! M) K  b2 V( X& l    for(int j = 0;j< 8;j++) {
    & k0 V; U9 a0 H! W        if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {
    0 [& I$ @. f8 H  P0 ?            t.p[j] = t[i<<1].p[cnt1];
    ! A4 n, H* `) o9 J, [6 d5 \' }            cnt1++;! Y$ w5 Z8 ]+ I( h  E# O& @
            } else {
    0 \) K- Z( H0 D% g0 Z            t.p[j] = t[i<<1|1].p[cnt2];0 _8 V4 ]7 n/ G7 {6 W' [: C) x
                cnt2++;- M$ C2 D. `6 w4 X: W: q
            }
    ! x" |; X8 j# t- M    }
    8 i) S+ _5 C7 h- K; O    return ;
    : h( l, v0 R# X. y8 B( D- A}
    7 z) g" j; a% V& @) K$ u1 k$ j! l+ l
    " Q& I  p  g) G& U$ qvoid modify(int i,int pos,int val) {
    2 S( E1 C& G, g: [    if(t.l> pos || t.r< pos) return ;/ v% e* G9 q/ T2 Z& n
        if(t.l == t.r) {
      A) r' i6 ]' c        t.p[0] = val;! D; ^, b8 @- o8 U$ P& u1 l( s
            return ;
    , ]$ ]4 h/ v  F3 {8 Y4 r8 C    }' T8 A/ R( C( P  z1 K7 g5 T
        modify(i<<1,pos,val);* L1 j6 H) ^1 |% \3 t% k) W" W
        modify(i<<1|1,pos,val);. x1 }$ s) @4 o) M
        update(i);1 _# _9 p% m# j2 ~5 G- K
        return ;
    - Z9 [( [+ N9 d5 i( N, y4 z' B+ f}
    - v* u' L% O/ Q; k  V
    / [0 q8 {" B# X5 Pvector<int> merge(vector<int> ans1,vector<int> ans2) {" Z- h4 ?& R" J" T
        vector<int> ans;
    ' K; c6 x+ e; z7 H! N$ I& Z    int cnt1 = 0,cnt2 = 0;, g1 v3 s) L9 b
        for(int j = 0;j< 8;j++) {
    - ~$ {0 J1 l6 h+ Q' i% k        if(ans1[cnt1]> ans2[cnt2]) {5 }" u0 k- \2 c% R9 Q
                ans.push_back(ans1[cnt1]);' X* f, p9 S4 K. H
                cnt1++;
    : t2 A+ t( x7 P) u, Y8 D        } else {+ L+ \9 I7 t, s& N% X# _
                ans.push_back(ans2[cnt2]);8 \, q7 Q9 k, ^
                cnt2++;# J+ B9 w- W4 s- _
            }: w8 ~8 d) V" h2 Z) ~
        }
    1 `& G& ^, a0 l& h3 `2 x    return ans;
    . O+ q. A7 ~  W. s3 N& I9 }* A0 ]}- R5 M4 Q% F* K% U6 C
    1 D/ i! `4 r4 _9 ~* Y7 I
    vector<int> query(int i,int l,int r) {
    ' c( S2 y8 h; e  f! ?& `- W    vector<int> ans;7 s0 A1 O. m/ T5 ?) `6 G
        if(t.l> r||t.r< l) {
    / ^" \' {# r4 _9 s7 i6 m        for(int j = 0;j< 8;j++) ans.push_back(0);' V& h& a" I: m3 q; D3 \
            return ans;
    + F1 d  V/ `* Q9 x' @    }; j  O2 z3 D5 Q0 o8 x) g# I8 y9 R
    8 ?( K) i' t: k# n6 P
        if(t.l>= l&&t.r<= r) {
    " R' f- e) z7 i8 V        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    & \( q# s; r: K$ D  ~) m, T5 J$ G1 J7 `        return ans;
    3 [; D% b" N& e+ D3 d/ @9 l    }
    , S: p  t1 _- j' J, C- X9 B
    " x$ s  z. W" ?* n6 U7 m3 p, ~    return merge(query(i<<1,l,r),query(i<<1|1,l,r));3 A5 l( W8 N0 ^# B- j+ g7 m
    }. K" g5 c% H  q- B3 Q

    9 i* V9 c. K2 s- cint main() {7 L6 |( c* s7 {% Z. O/ o
        cin>>l>>n;( u; G! y% `. o5 b1 F
    . k( n" G9 n: ~$ O# l, i
        build(1,1,l);
    9 u: E* N$ b* S' O* [& w! }1 c3 G+ H% j    char c;3 R1 H4 T$ R' X! H& C3 N4 z
        int x,y;
    ( W% o" g* `, ~    while(n--) {8 x9 W. {6 |! ~5 ^8 W" T
            scanf(" %c %d %d",&c,&x,&y);3 A; y' M$ ?5 J& Z+ \* C9 p5 P- Q
            if(c == 'C') {
    ; L/ w: D3 b8 q            modify(1,x,y);+ r( c6 g5 X3 Q6 X( b2 Q
            } else {. }: l4 {/ n2 n. w- D( e& N
                if(y-x+1< 8) {
    . s' o, i* l( i                printf("0\n");
    5 a) g$ R* C& x+ J                continue;# m! O/ O6 ]7 e1 o% x2 }8 Q
                }
    . y1 v& @) H; ~7 n) b1 K: M            vector<int> ans = query(1,x,y);' b& G2 l- G5 x* L* w/ d+ n# ^
                printf("%d\n",ans[7]);
    1 d1 `* K" j0 [) {        }
    . m2 C6 I1 }. n- p    }; o/ |, i4 s, E4 Y

    2 R! e5 n  ]1 `( A. k" ~* V) g    return 0;5 f6 L. _+ L1 o
    }! b1 p+ q. z6 b3 l6 n. ]  m  M
    8 B7 Y" A, A7 b& g
    ---------------------
    * ?( \' |: |& c; N9 o( `* t1 G作者:nka_kun
    & N3 T+ v1 }# ?8 D* H  Y. b. D来源:CSDN
    3 F7 @1 f- A! W% _5 ?( e
    6 o- Q/ ?1 ]* q8 U0 G# n: [2 k* T" E% Y

    4 v/ m5 Q5 z. ^5 }  \0 F- V
    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-29 07:02 , Processed in 0.278630 second(s), 51 queries .

    回顶部