码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 3289 Mato的文件管理

时间:2016-10-24 01:52:25      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:uniq   #define   --   for   cst   string   zoj   lowbit   blog   

莫队+BIT。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 50050
using namespace std;
int n,m,a[maxn],hash[maxn],tot=0,ans=0,pos[maxn],block,t[maxn];
struct query
{
    int l,r,ans,id;
}p[maxn];
bool cmp1(query x,query y)
{
    if (pos[x.l]==pos[y.l]) return x.r<y.r;
    return pos[x.l]<pos[y.l];
}
bool cmp2(query x,query y)
{
    return x.id<y.id;
}
int lowbit(int x) {return (x&(-x));}
void modify(int x,int val)
{
    for (int i=x;i<=tot;i+=lowbit(i))
        t[i]+=val;
}
int ask(int x)
{
    int ret=0;
    for (int i=x;i>=1;i-=lowbit(i))
        ret+=t[i];
    return ret;
}
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        hash[++tot]=a[i];
    }
    sort(hash+1,hash+tot+1);tot=unique(hash+1,hash+tot+1)-hash-1;
    for (int i=1;i<=n;i++) a[i]=lower_bound(hash+1,hash+tot+1,a[i])-hash;
    block=sqrt(n);
    for (int i=1;i<=n;i++) pos[i]=(i-1)/block+1;
    scanf("%d",&m);
    for (int i=1;i<=m;i++)
    {
        scanf("%d%d",&p[i].l,&p[i].r);
        p[i].id=i;
    }
    sort(p+1,p+m+1,cmp1);
    int l=1,r=0;
    for (int i=1;i<=m;i++)
    {
        for (int j=r;j<p[i].r;j++)
        {
            ans+=ask(tot)-ask(a[r+1]);
            modify(a[r+1],1);
            r++;
        }
        for (int j=r;j>p[i].r;j--)
        {
            ans-=ask(tot)-ask(a[r]);
            modify(a[r],-1);
            r--;
        }
        for (int j=l;j<p[i].l;j++)
        {
            ans-=ask(a[l]-1);
            modify(a[l],-1);
            l++;
        }
        for (int j=l;j>p[i].l;j--)
        {
            ans+=ask(a[l-1]-1);
            modify(a[l-1],1);
            l--;
        }
        p[i].ans=ans;
    }
    sort(p+1,p+m+1,cmp2);
    for (int i=1;i<=m;i++) printf("%d\n",p[i].ans);
    return 0;
}

 

BZOJ 3289 Mato的文件管理

标签:uniq   #define   --   for   cst   string   zoj   lowbit   blog   

原文地址:http://www.cnblogs.com/ziliuziliu/p/5991382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!