QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2232|回复: 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组决赛题解第九题$ T) N/ b1 ]( b
    8 I3 a* {! a  |% e# u

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)
    5 d6 E2 h+ N) p# o. E* y! k每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8
    ( d' A2 u( @2 K  {# q! N查询的时候返回含有8个值得list,并不断merge

    代码:

    : g8 c3 E" K  Y+ J
    #include<bits/stdc++.h>
    * |. u- [" X8 a7 p0 l#define mem(a,b) memset(a,b,sizeof(a))) V  G, }; X; l9 T  H
    using namespace std;/ O$ R0 v7 }. K
    typedef long long ll;
    . i8 Q: I, u5 ~2 Bconst int inf = 0x3f3f3f3f;+ v2 S$ N% v) E: B+ H
    const int maxn = 1e5+55555;
    8 e" G0 c% P" P1 R7 e  T8 Wconst ll mod = 998244353;+ R. A7 g9 i: A, N6 l- M
    const double eps = 1e-7;
    9 _; J  r1 w6 V. ^, h" n
    & h1 J2 S9 U3 Q  o2 }( vstruct tree {
    + Z  I4 C! V) j' u$ i4 f  [: ]! u    int l,r;
    ) H2 k8 y* b0 ?    int p[10];# d1 i& r  M0 m/ a' K1 ?
    } t[maxn<<2];. S7 m, X# Z: `  T* L; q: p4 L* C

    - r* Y: ]0 R" G) e% W2 a. dint l,n;8 Y3 k4 q2 |  u' Q

    5 k; @2 l  S! f3 `: zvoid build(int i,int l,int r) {; @( c+ ~9 D: M5 R4 Q$ H
        t.l = l;% h5 g2 l4 i# Q) w4 G3 X8 P) w& l
        t.r = r;+ h. o# L# x$ C9 ?
        mem(t.p,0);! b4 p/ Q. }9 W2 J, v

    1 v' M( h8 z6 \5 i* C' B    if(l == r) return ;) n& e  y+ r' U  y3 \* r
        int mid = (l+r)>>1;
    3 f8 m2 v2 V8 j/ E- `/ {  |  n    build(i<<1,l,mid);0 g& [! J- M) m% X6 s7 z4 J
        build(i<<1|1,mid+1,r);; N2 ?8 L0 O9 s, o" A$ R
        return ;
      D. P* D9 {$ X; \5 q}5 L0 k8 z/ F# r1 a. o. {( T7 r

    , H% |+ E" Q6 n# f1 {$ Ivoid update(int i) {
    & t; R' Y4 E3 R6 W1 @; u1 E+ F- D( ^    int cnt1 = 0,cnt2 = 0;
    * J( Q- M7 j: @# ^    for(int j = 0;j< 8;j++) {5 k5 ^7 O( j. X2 D
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {/ R: ~' A6 i  f
                t.p[j] = t[i<<1].p[cnt1];( G) d  ?5 \: g. b
                cnt1++;& s& u+ V! ?) _( d  Z# Q( o9 {) g
            } else {
    " S3 J  b8 L3 D9 X            t.p[j] = t[i<<1|1].p[cnt2];, P5 ~' I' b' V7 C5 o/ R* L# n& y
                cnt2++;7 \! I* B3 M" e1 [4 o& D* k
            }& A* @: E+ f: n# A! c
        }* E9 l. z: B+ D! z& F. }* Q
        return ;
    . |6 n/ y! E# X# L4 F}
    % X* Q3 s' N. X. M1 X( h7 ?- P% `' p. G- d7 R
    void modify(int i,int pos,int val) {5 p' q! G- d4 d
        if(t.l> pos || t.r< pos) return ;
    9 m! p4 P5 W/ F1 n1 \. [    if(t.l == t.r) {  A$ Y) p3 A, R8 ]% [
            t.p[0] = val;
    - ]0 G5 i9 o+ N7 r, ^3 N        return ;
    0 A) e& V: P. f) V8 i    }" j2 @; u2 f1 n3 s+ M* s' b. S
        modify(i<<1,pos,val);
    5 o: ^9 Y) o6 Q# W; I) T    modify(i<<1|1,pos,val);. d% S6 ]: g3 |+ m8 F: c
        update(i);& b( i+ K! w9 u7 r* {2 O
        return ;3 i" u# G) B) b8 _0 `
    }
    0 N1 q4 I; h" D. e3 D. d$ d2 e+ L" ?! w- Y' f' |% M+ F0 t& k2 X  H5 ?
    vector<int> merge(vector<int> ans1,vector<int> ans2) {
    - V4 }% X4 P$ q" Y" t+ X    vector<int> ans;
    2 V4 \" m5 H) Z% V/ ^    int cnt1 = 0,cnt2 = 0;
    3 G- m! F1 K: e4 A) g# t6 O    for(int j = 0;j< 8;j++) {* D4 k- O, I- Y" x0 a
            if(ans1[cnt1]> ans2[cnt2]) {* j3 C, Y  C" p% ~
                ans.push_back(ans1[cnt1]);
    , X" |- J9 ^, @% n4 e$ E/ P6 V$ p            cnt1++;
    / @# Q: s* d8 V6 [8 y- Z* A5 R7 q        } else {* }1 `2 W) a' ^! T
                ans.push_back(ans2[cnt2]);
      u6 K! L; W# o! Y9 c, m            cnt2++;7 F6 ^9 h; e& d3 E
            }3 M6 }! X: C9 l- a# c9 c
        }
    5 e2 p1 m! y4 T1 ^    return ans;8 N& n' z5 b  x# L( f1 D; ]
    }
    * w3 B& y9 x4 l1 X/ c1 E) ~/ m8 a, J- g  Q0 q: _. |9 x/ L" m$ J0 ^. N
    vector<int> query(int i,int l,int r) {
    ( Y* k( j' a; F6 ~1 }& W    vector<int> ans;
    . S1 Y/ B: O+ u* e    if(t.l> r||t.r< l) {
    + ?: f: p/ D$ Q        for(int j = 0;j< 8;j++) ans.push_back(0);2 D% m- h+ ]" K5 A/ C4 {
            return ans;6 |' t2 y1 K( ?3 Y# \
        }* U7 o3 q! q+ K# a# i6 I

    # T- f) J/ v& U- z. z    if(t.l>= l&&t.r<= r) {2 X( |% S# N9 `
            for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);
    ) [/ \: R2 @% C' l+ A& o; U        return ans;
    ) k+ J, d5 ?' S0 C( p    }
    9 v4 {1 `* \/ Z# y2 {, C  R% I! b
        return merge(query(i<<1,l,r),query(i<<1|1,l,r));
    8 J: u, T7 I& h$ {}
    * t* I! T7 H% A# M! B* c0 I( P$ P0 y1 ^5 B, S
    int main() {) W% i- M* P* |8 S0 w/ ~7 b: I
        cin>>l>>n;) O+ e& w/ ?$ o3 M4 D2 F8 q
    $ y; X" r. {0 Y0 q$ U& q
        build(1,1,l);+ W. }" L; B' y$ K+ @
        char c;( W3 }$ x% N! ~5 K& k
        int x,y;  Q/ {6 x, M' o* ~4 C* J
        while(n--) {. e$ q( U/ K$ Q* Z$ ]
            scanf(" %c %d %d",&c,&x,&y);+ I6 A4 c/ I* L( V* |  P
            if(c == 'C') {
    5 D. _# m6 U! C* H! b            modify(1,x,y);
    $ i8 x, I2 k/ x; C3 h; K$ x        } else {' B/ n3 r! n: [, X0 h
                if(y-x+1< 8) {
    2 M4 N5 E+ }$ I6 Q; J. q1 o                printf("0\n");0 P$ B: y% {+ O" E) a$ ~$ a, {
                    continue;
    ! Z3 f( |% _+ I. {            }* d" z2 L1 ]. p1 J
                vector<int> ans = query(1,x,y);% Y& Y7 W3 S6 t- K2 i
                printf("%d\n",ans[7]);/ h0 h$ z. W5 f* `& T/ T
            }
    * y6 F( M4 {  L' {$ z1 l    }3 X7 S5 W' P( _# ^  [& {( V
    - B, j0 a6 _; T  L
        return 0;+ o6 b  @* C1 g4 v+ @8 ?" Y
    }3 Y! p+ ], I5 r4 e* K  u" g

    3 S9 q3 T. b3 i# c---------------------
    : B; p: l. d! j0 ?- D, }, O作者:nka_kun
      A& w# K4 T+ Z( }) A来源:CSDN ; V" r1 e, Y/ I

    , j: W" F3 Y$ D& m/ l3 ~
    $ u0 O5 Y8 P; m0 R# A
    2 z9 q" ^1 p3 m2 j5 ]/ e
    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-12 12:42 , Processed in 0.472418 second(s), 51 queries .

    回顶部