zoukankan      html  css  js  c++  java
  • PAT-T1010 Lehmer Code(分块解法)

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=1e6+100;
    int a[maxn];
    int c[maxn];//表示分块数组里每个点的信息 
    int mk[maxn];//用于标记值在每个块内的数的个数
    int l[maxn];//记录每个块的起点
    int r[maxn];//记录每个块的终点
    int pos[maxn];//标记该点在哪个块内 
    int r1[maxn];//标记每个元素右边比自己小的个数 
    int main () {
        int N;
        scanf("%d",&N);
        for (int i=1;i<=N;i++)
            scanf("%d",&a[i]),a[i]+=10010;
        
        int t=sqrt(maxn);
        for (int i=1;i<=t;i++) {
            l[i]=(i-1)*t+1;
            r[i]=i*t;
        }
        if (r[t]<maxn) t++,l[t]=r[t-1]+1,r[t]=N;
        for (int i=1;i<=t;i++) {
            for (int j=l[i];j<=r[i];j++) {
                pos[j]=i;
            }
        } 
        for (int i=N;i>=1;i--) {
            c[a[i]]++;
            mk[pos[a[i]]]++;
            for (int j=a[i]-1;j>=l[pos[a[i]]];j--)
                 r1[i]+=c[j];
            for (int j=pos[a[i]]-1;j>=1;j--) 
                r1[i]+=mk[j];
        }
        for (int i=1;i<=N;i++) {
            if (i!=1) printf(" ");
            printf("%d",r1[i]);
        }
    } 
  • 相关阅读:
    Struts2
    Struts2
    学习python的第九天
    学习python的第八天--作业
    学习python的第七天--作业
    学习python第六天 --作业
    学习python的第六天---1(理论)
    学习python第五天
    学习python第四天
    学习python第三天
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12642048.html
Copyright © 2011-2022 走看看