luogu P1198 [JSOI2008]最大數

來源:互聯網
上載者:User

標籤:void   ret   char   聯通   int   clu   二次   get   pos   

二次聯通門 :  luogu P1198 [JSOI2008]最大數

 

 

/*    luogu P1198 [JSOI2008]最大數     線段樹水過。。。        建一顆空樹    然後單點插入, 區間查詢即可 */#include <cstdio>#define Max  200000void read (long long &now){    now = 0;    register char word = getchar ();    while (word > ‘9‘ || word < ‘0‘)        word = getchar ();    while (word >= ‘0‘ && word <= ‘9‘)    {        now = now * 10 + word - ‘0‘;        word = getchar ();    }}        inline long long max (long long a, long long b){    return a > b ? a : b;}long long N;long long Mod;struct Segment{    struct Segment_Tree    {        long long l;        long long r;        long long Mid;        long long Maxn;            };        Segment_Tree tree[Max << 3];        void Tree_Build (long long l, long long r, long long now)    {        tree[now].l = l;        tree[now].r = r;        if (l == r)            return ;        tree[now].Mid = (l + r) >> 1;        Tree_Build (l, tree[now].Mid, now << 1);        Tree_Build (tree[now].Mid + 1, r, now << 1 | 1);        }        void Tree_Insert (long long pos, long long now, long long number)    {        if (tree[now].l == tree[now].r)        {            tree[now].Maxn = number;            return ;        }        if (pos <= tree[now].Mid)            Tree_Insert (pos, now << 1, number);        else            Tree_Insert (pos, now << 1 | 1, number);        tree[now].Maxn = max (tree[now << 1].Maxn, tree[now << 1 | 1].Maxn);    }        long long Tree_Query (long long l, long long r, long long now)    {        if (tree[now].l == l && tree[now].r == r)            return tree[now].Maxn;        if (r <= tree[now].Mid)            return Tree_Query (l, r, now << 1);        else if (l > tree[now].Mid)            return Tree_Query (l, r, now << 1 | 1);        else            return max (Tree_Query (l, tree[now].Mid, now << 1), Tree_Query (tree[now].Mid + 1, r, now << 1 | 1));    }    };Segment Tree;long long Tree_Pos;int main (int argc, char *argv[]){    read (N);    read (Mod);    Tree_Pos = 0;    Tree.Tree_Build (1, N, 1);    char type[5];    long long x;    long long t = 0;    while (N--)    {        scanf ("%s", type);        read (x);        if (type[0] == ‘Q‘)        {            t = Tree.Tree_Query (Tree_Pos - x + 1, Tree_Pos, 1);            printf ("%lld\n", t);        }        else            Tree.Tree_Insert (++Tree_Pos, 1, (x + t) % Mod);     }    return 0;}

 

luogu P1198 [JSOI2008]最大數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.