• [USACO17JAN]Balanced Photo平衡的照片 (树状数组)


    题目链接

    Solution

    先离散化,然后开一个大小为 (100000) 的树状数组记录前面出现过的数。
    然后查询 ((h[i],n]) 即可.
    还要前后各做一遍。

    Code

    #include<bits/stdc++.h>
    #define N 200008
    #define ll long long
    using namespace std;
    
    void in(ll &x)
    {
        char ch=getchar();ll f=1,w=0;
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch<='9'&&ch>='0'){w=w*10+ch-'0';ch=getchar();}
        x=f*w; return;
    }
    
    ll h[N],c[N],a[N],n;
    ll L[N],R[N],ans;
    
    ll lowbit(ll x){return x&(-x);}
    void insert(int x)
    {for(int i=x;i<=n;i+=lowbit(i))c[i]++;}
    ll query(int x)
    {ll ans=0;for(int i=x;i>=1;i-=lowbit(i))ans+=c[i];return ans;}
    
    int main()
    {
        //freopen("a.in","r",stdin);
        in(n);
        for(int i=1;i<=n;i++)in(h[i]),a[i]=h[i];
        sort(a+1,a+n+1);
        for(int i=1;i<=n;i++)
        h[i]=lower_bound(a+1,a+n+1,h[i])-a;
        for(int i=1;i<=n;i++)
            L[i]=query(n)-query(h[i]),insert(h[i]);
        memset(c,0,sizeof(c));
        for(int i=n;i>=1;i--)
            R[i]=query(n)-query(h[i]),insert(h[i]);
        for(int i=1;i<=n;i++)
        {
            ll x=L[i],y=R[i];
            if(x<y)swap(x,y);
            if(x==y)continue;
            if(x>y*2)ans++;
        }cout<<ans<<endl;
    }
    
  • 相关阅读:
    静态文件
    orm多表操作
    thinkphp5.0模块设计
    thinkphp5.0URL访问
    thinkphp5.0入口文件
    thinkphp5.0生命周期
    thinkphp5.0架构总览
    thinkphp5.0目录结构
    thinkphp5.0开发规范
    thinkphp5.0安装
  • 原文地址:https://www.cnblogs.com/Kv-Stalin/p/11233700.html
Copyright © 2020-2023  润新知