QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2320|回复: 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组决赛题解第九题# O; @; B. i% i
    : N) z7 J5 k5 f& ^( l. Y0 L9 z1 k

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

    思路: 区间第8大值,线段树在时间、空间都够了(蓝桥怎么会让手写主席树。。)6 t: U  d0 d! K: a, Y$ t
    每个节点存储它管辖的这个区间的前8大值,修改的时候暴力merge,单次修改复杂度log(n)*8# A! k% I; ^7 p: ]1 w! j& ?
    查询的时候返回含有8个值得list,并不断merge

    代码:


    ) u8 w" d+ Y5 e#include<bits/stdc++.h>
    ' o; f& P$ _8 Q+ `& n& L#define mem(a,b) memset(a,b,sizeof(a))
    0 O% F8 n. Z4 Qusing namespace std;
    : T1 S! T) m' ktypedef long long ll;
    : A" d7 N2 b8 `( fconst int inf = 0x3f3f3f3f;
    * Y( `, j; {; {: M* l) ]8 ~1 nconst int maxn = 1e5+55555;
    2 n2 N3 |. L4 I* M7 ?const ll mod = 998244353;9 T$ g6 B0 a9 @+ v
    const double eps = 1e-7;8 [- j0 G& k8 ?9 m5 [' u

    $ z" p" @& [) t  t0 d- pstruct tree {
    9 ]. ?3 R/ b/ @5 G) R; m    int l,r;7 L3 K  ?5 q. D% \
        int p[10];5 J+ `3 Y; A( Y9 X6 i2 f
    } t[maxn<<2];; o, x( _) c# i
    3 b# u: z9 Y& T" a: |( B
    int l,n;% o- o% U: [1 t/ e5 Y
    2 s" _5 I+ A) z! ]5 f8 N% g3 |# `
    void build(int i,int l,int r) {
    3 X9 a/ g6 C2 [9 b1 F    t.l = l;
    1 h' O6 V& }. v8 q' L    t.r = r;) [8 r* ~/ s* m  C/ J! M3 r
        mem(t.p,0);1 Z, S3 v0 q6 Z; o5 t( {+ N( D8 ?
    3 S/ P5 E( M3 W' v6 e2 _0 ~# X
        if(l == r) return ;- F: L3 B: C5 z7 L) W" ]# N
        int mid = (l+r)>>1;
    ) P6 c  s  E1 \3 Z$ V    build(i<<1,l,mid);
    . {4 x1 A) P7 K8 e# s# |2 |  B1 ]  c0 m    build(i<<1|1,mid+1,r);+ c0 e( \8 ?7 d8 m7 X
        return ;
    ) B' }2 A) y# a6 {1 Q1 k}# R3 B3 F# {8 N' o' x! _- f5 G
    ( t8 W4 U( C2 q* d# f
    void update(int i) {
    $ g; M5 u. R; V. ^9 z    int cnt1 = 0,cnt2 = 0;# j# S8 w4 J" @! W" s
        for(int j = 0;j< 8;j++) {  L7 t  z  s( |9 ~0 K! {2 M
            if(t[i<<1].p[cnt1]> t[i<<1|1].p[cnt2]) {
    & W( Y' _  [6 R            t.p[j] = t[i<<1].p[cnt1];
    0 o& V; E0 F0 K- ^            cnt1++;. ?! m% R& j* E3 e% T& {
            } else {$ A6 u7 }: s- b7 m- T
                t.p[j] = t[i<<1|1].p[cnt2];: O' [1 A0 |  A) M, J
                cnt2++;
    : _& k3 ~: B9 D( }  U' g        }
    & R- V! j2 k, G+ f) v0 W. a    }
    ' q, R- J" v& E% Q) L3 X8 K    return ;
    + i( _8 T' m8 U3 ]4 r$ _}. Q( F0 K4 P% t& g1 J
    . q0 h6 a- ^% L# W8 a  O, \3 j
    void modify(int i,int pos,int val) {
    4 W! u+ ^' f) P% I    if(t.l> pos || t.r< pos) return ;
    2 U0 f. c: v8 M  {    if(t.l == t.r) {  {+ b0 Y; m+ R; L6 T
            t.p[0] = val;
    2 R( V- D2 ~$ }. d/ b* K. m# K        return ;
    ; ^" Z+ ~7 _& R3 t5 s    }
    6 X" {6 {4 d( R, H6 u, t* `    modify(i<<1,pos,val);3 Y: J( @( U; ?9 w; e9 M+ {
        modify(i<<1|1,pos,val);
    ) g8 C& s7 M- a  V3 @( d# P: q; S    update(i);* _( G5 U! E9 o7 @5 Y- F7 N
        return ;
    % E2 q' K& z! \$ m- y}
    $ R$ T# `2 ]# r) i5 o/ J
    1 g" v) }2 W. d* M2 y' z0 ]vector<int> merge(vector<int> ans1,vector<int> ans2) {
    % `% K+ m% d$ U" b! M+ J    vector<int> ans;$ K1 ~2 d  U8 y6 B) T9 [  ^
        int cnt1 = 0,cnt2 = 0;
    ) s1 h1 h- N* G% D    for(int j = 0;j< 8;j++) {4 r; k5 o9 k% L
            if(ans1[cnt1]> ans2[cnt2]) {
    % h. K- X$ F5 E, c& X2 |7 o0 [            ans.push_back(ans1[cnt1]);
    ; u4 O2 X9 U# P* x2 ~            cnt1++;: I. C; S* Z/ E5 ~: C! j/ v$ G% s$ k
            } else {5 Q  X& e) x2 k+ _) S+ x/ i
                ans.push_back(ans2[cnt2]);0 r, e0 N9 y9 N, O& ?3 n' f
                cnt2++;
    9 R& j; s8 U  v# o- }4 S        }
    % J) \" a2 E! l2 Z    }
    $ U- U9 J- p6 G' s    return ans;; U3 ]0 [' ~" F  L6 g4 R3 c& |
    }
    2 w# b9 F0 F6 H2 X8 K& z9 K+ [! z9 L* w5 M
    vector<int> query(int i,int l,int r) {/ b2 ?# X* q) f! R/ c* U, W, e
        vector<int> ans;
    ! j" b: g7 Q* E    if(t.l> r||t.r< l) {
    2 z4 [7 }" h! V! S/ e( Z        for(int j = 0;j< 8;j++) ans.push_back(0);
    , |) x+ U- b" v$ _, {+ B        return ans;: {- u! a3 g$ f
        }
    $ Y- j& T5 t; j; W4 ]) {6 Y: C/ J5 b, r* a! N, u
        if(t.l>= l&&t.r<= r) {
    # c% V3 Q  ~5 D9 Z        for(int j = 0;j< 8;j++) ans.push_back(t.p[j]);0 \( X' O; a) m
            return ans;
    0 X& C3 e9 X$ W' l! Q" U: h* l    }
    5 K; t( [) ^+ ?, ~; I% P$ D( [
    4 t1 R% o- t4 h* r    return merge(query(i<<1,l,r),query(i<<1|1,l,r));
    - Q4 v' O" B3 F! L; V}
    2 ^# o. A0 V3 w" u! G' v
    * d5 j6 G, P# l# e( }' ~int main() {  v9 F0 G* A/ N1 |1 F" m* x
        cin>>l>>n;
    + V! e6 g" u7 ^5 _' A! z) d. F8 Y7 g" H
        build(1,1,l);; j7 L3 [( z+ o8 P5 b
        char c;; B* x8 _0 k* T+ b0 c5 ]
        int x,y;1 ?" [) ^& Q* _6 l( ]
        while(n--) {+ O0 ^1 w& z8 R5 C3 x# R/ n
            scanf(" %c %d %d",&c,&x,&y);
    ' W7 d) d- I1 [! p; M        if(c == 'C') {
    % q& T3 ^( f$ ^+ A            modify(1,x,y);. r0 o% B( d  o7 @$ ~- Y
            } else {
    0 \1 U! B  h+ u5 \# C! _            if(y-x+1< 8) {+ |# e* S) G7 u  j3 y2 m0 Z
                    printf("0\n");
    / Q  Q7 L! G5 g$ U. s6 I' H                continue;& y+ c+ D! _7 P# G
                }
    + H+ x/ \* m1 g& W# ^& M$ ^            vector<int> ans = query(1,x,y);
    6 E+ a0 N2 ^( e5 Q8 L8 \            printf("%d\n",ans[7]);  C( k: [* r) K' }2 V* M* V$ y
            }
    / K. k' u- [! q* ~. H    }- ^/ k% r! @: z/ d; r: q
    4 s! t1 s7 T) Z( \* M; N9 c
        return 0;
    9 B- W' p: }7 d# o}
    8 @& p4 D; R7 w  n# Q8 C0 o3 {. Q& g7 |' B. t
    --------------------- ( `9 c( ]" _7 l4 U* X# E0 E  A
    作者:nka_kun 4 e% ]  B: k  R6 \3 U: S! d7 a; ~
    来源:CSDN " Z6 X+ e0 `$ M" u' ]

    - D$ V  x2 j/ B: j3 y0 A; A% e4 `+ Y

    ) u4 O  v2 {7 b+ F8 B
    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 07:06 , Processed in 0.308020 second(s), 51 queries .

    回顶部