zoukankan      html  css  js  c++  java
  • [JSOI2008]最大数

    线段树。。。板子。。。不能再板子了。。。

    一开始用了cin读字符。。。结果bzoj上T了。。。

    然后修改了一下。。。过了。。。

    呆码:

    #include<iostream>
    #include<cstdio>
    #define INF -99999999
    #define N 200020
    using namespace std;
    
    int len,n,t,m,mo,sum[N<<2];
    char ch;
    
    inline void build(int rt,int l,int r)
    {
        if(l==r)
        {
            sum[rt]=INF;
            return;
        }
        int mid=l+r>>1;
        build(rt<<1,l,mid);
        build(rt<<1|1,mid+1,r);
        sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
    }
    
    inline void update(int rt,int l,int r,int L,int k)
    {
        if(l==r)
        {
            sum[rt]=k;
            return;
        }
        int mid=l+r>>1;
        if(L<=mid) update(rt<<1,l,mid,L,k);
        else update(rt<<1|1,mid+1,r,L,k);
        sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
    }
    
    inline int query(int rt,int l,int r,int L,int R)
    {
        if(L<=l && r<=R)
        {
            return sum[rt];
        }
        int mid=l+r>>1;
        int ans=INF;
        if(L<=mid) ans=max(ans,query(rt<<1,l,mid,L,R));
        if(R>mid) ans=max(ans,query(rt<<1|1,mid+1,r,L,R));
        return ans;
    }
    
    int main()
    {
        scanf("%d%d",&m,&mo);
        build(1,1,200000);
    
        for(int i=1;i<=m;i++)
        {
            ch='F';
            while(ch!='A' && ch!='Q') ch=getchar(); scanf("%d",&n);
            if(ch=='A') { update(1,1,N-20,len+1,(n+t)%mo); len+=1; }
            if(ch=='Q') { t=query(1,1,N-20,len-n+1,len); printf("%d
    ",t); }
        }
    }
    代码
  • 相关阅读:
    高斯消元
    逻辑运算符之优先级&&and、or
    康托展开
    关于bootstrap的双层遮罩问题
    写好页面在内网内访问
    swiper插件的一些坑
    第一篇博客
    poj 3415 Common Substrings
    poj 1509 Glass Beads
    poj 3260 The Fewest Coins
  • 原文地址:https://www.cnblogs.com/zzzyc/p/9306228.html
Copyright © 2011-2022 走看看