zoukankan      html  css  js  c++  java
  • 中南林业科技大学第十一届程序设计大赛(H、J)

    H 渴望力量吗

    二分 

    #include <bits/stdc++.h>
     
    using namespace std;
     
    const int N=300000+10;
    vector<int>edge[N];
    bool vis[N];
    int main()
    {
        int n,x;
        while(~scanf("%d",&n))
        {
            for(int i=0;i<N;i++)
                edge[i].clear();
            for(int i=1;i<=n;i++)
            {
                vis[i]=false;
                scanf("%d",&x);
                edge[x].push_back(i);
            }
            int q;
            scanf("%d",&q);
            while(q--)
            {
                int l,r,k;
                scanf("%d%d%d",&l,&r,&k);
                if(edge[k].size()==0)
                {
                    printf("0
    ");
                    continue;
                }
                if(!vis[k])
                {
                    edge[k].push_back(n+1);
                    edge[k].push_back(0);
                    vis[k]=true;
                }
                int L=lower_bound(edge[k].begin(),edge[k].end(),l)-edge[k].begin();
                int R=upper_bound(edge[k].begin(),edge[k].end(),r)-edge[k].begin()-1;
                printf("%d
    ",max(0,R-L+1));
            }
        }
         
        return 0;
    }
    J are you ok?

    题解: 线段树;但因为每次更新都是加一,也可以维护区间最值,二分

    代码如下:

    线段树:

    #include <bits/stdc++.h>
    
    using namespace std;
    const int N=1e6+10;
    
    int maxx[N<<2],a[N];
    
    void push_up(int rt) {  maxx[rt]=max(maxx[rt<<1],maxx[rt<<1|1]);    }
    int n;
    void build(int l,int r,int rt)
    {
        if(l==r)
        {
            scanf("%d",&a[l]);
            maxx[rt] = a[l];
            return;
        }
        int mid = (l+r)>>1;
        build(l,mid,rt<<1);
        build(mid+1,r,rt<<1|1);
        push_up(rt);
    }
    void update(int l,int r,int rt,int p,int y)
    {
        if(l==r)
        {
            a[l]+=y;
            maxx[rt] = max(maxx[rt],a[l]);
            return ;
        }
        int mid = (l+r)>>1;
        if(p <= mid)
            update(l,mid,rt<<1,p,y);
        else
            update(mid+1,r,rt<<1|1,p,y);
        push_up(rt);
    }
    
    int query(int l,int r,int rt,int p)
    {
        if(l==r)
            return l;
        int mid = (l+r)>>1;
    
        if(maxx[rt<<1]>=p)
            return query(l,mid,rt<<1,p);
        return query(mid+1,r,rt<<1|1,p);
    }
    
    int main()
    {
        int q;
        while(~scanf("%d%d",&n,&q))
        {
            build(1,n,1);
            while(q--)
            {
                int k;
                scanf("%d",&k);
                if(k>maxx[1])
                    puts("are you ok");
                else
                {
                    int ind = query(1,n,1,k);
                    printf("%d
    ",ind-1);
                    if(ind>1)
                        update(1,n,1,ind-1,1);
                }
    
            }
        }
        return 0;
    }

    二分:

    #include<bits/stdc++.h>
     
    using namespace std;
     
    const int N=1e6+7;
    int maxx[N],a[N];
     
    int main()
    {
        int n,q;
        while(~scanf("%d%d",&n,&q))
        {
            for(int i=0;i<n;i++)
                scanf("%d",a+i);
            maxx[0]=a[0];
            for(int i=1;i<n;i++)
                maxx[i]=max(maxx[i-1],a[i]);
             
            while(q--)
            {
                int k;
                scanf("%d",&k);
                int ind=lower_bound(maxx,maxx+n,k)-maxx;
                if(ind>0&&ind<n)
                {
                    a[ind-1]++;
                    maxx[ind-1]=max(maxx[ind-1],a[ind-1]);
                }
                if(ind<n)
                    printf("%d
    ",ind);
                else
                    puts("are you ok");
                 
            }
        }
        return 0;  
    }
  • 相关阅读:
    中国的网游,发人深省
    .NET开源Bug管理软件BugTracker.NET使用小记
    开源的学术论文排版软件TeX简介
    在sqlplus中批量执行sql命令
    DotNetBar中ExpandableSplitter使用技巧
    上传一很酷的黑色背景.vssettings文件
    瑞雪兆丰年2008年的第一场雪
    Oracle用Start with...Connect By子句递归查询
    【转载】Making new features with topology tools(ArcInfo and ArcEditor only)
    Geoprocess Execute出错原因?Vb+AE9.2
  • 原文地址:https://www.cnblogs.com/lemon-jade/p/9074118.html
Copyright © 2011-2022 走看看