zoukankan      html  css  js  c++  java
  • 【题解】Luogu P4867 Gty的二逼妹子序列

    原题传送门

    Luogu P4396 [AHOI2013]作业

    询问多了10倍,但还能跑过(smog

    #include <bits/stdc++.h>
    #define N 100005
    #define M 1000005
    //#define getchar nc
    using namespace std;
    inline char nc(){
        static char buf[100000],*p1=buf,*p2=buf;
        return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
    }
    inline int read()
    {
        register int x=0,f=1;register char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
        return x*f;
    }
    inline void write(register int x)
    {
        if(!x)putchar('0');if(x<0)x=-x,putchar('-');
        static int sta[20];register int tot=0;
        while(x)sta[tot++]=x%10,x/=10;
        while(tot)putchar(sta[--tot]+48);
    }
    int n,m,blocksize=0,ans[M],v[N],p[N];
    struct BinaryIndexTree{
    	int tr[N];
    	inline void update(register int pos,register int x)
    	{
    		for(register int i=pos;i<=n;i+=i&(-i))
    			tr[i]+=x;
    	}
    	inline int query(register int pos)
    	{
    		int res=0;
    		for(register int i=pos;i;i-=i&(-i))
    			res+=tr[i];
    		return res;
    	}
    }tr;
    struct query{
    	int l,r,a,b,id,bl;
    }q[M];
    inline bool cmp(register query a,register query b)
    {
        return a.bl!=b.bl?a.l<b.l:((a.bl&1)?a.r<b.r:a.r>b.r);
    }
    inline void add(register int x)
    {
    	if(++p[v[x]]==1)
    		tr.update(v[x],1);
    }
    inline void del(register int x)
    {
    	if(--p[v[x]]==0)
    		tr.update(v[x],-1);
    }
    int main()
    {
    	n=read(),m=read();
    	blocksize=sqrt(n);
    	for(register int i=1;i<=n;++i)
    		v[i]=read();
    	for(register int i=1;i<=m;++i)
    		q[i].l=read(),q[i].r=read(),q[i].a=read(),q[i].b=read(),q[i].id=i,q[i].bl=(q[i].l-1)/blocksize+1;
    	sort(q+1,q+1+m,cmp);
    	int l=1,r=0;
    	for(register int i=1;i<=m;++i)
    	{
    		int ll=q[i].l,rr=q[i].r;
    		while(l>ll)
    			add(--l);
    		while(l<ll)
    			del(l++);
    		while(r<rr)
    			add(++r);
    		while(r>rr)
    			del(r--);
    		ans[q[i].id]=tr.query(q[i].b)-tr.query(q[i].a-1);
    	}
    	for(register int i=1;i<=m;++i)
    		write(ans[i]),puts("");
    	return 0;
    }
    
    
  • 相关阅读:
    springboot 搭建druid数据监控
    spring-boot编写简易mvc
    解决rabbitmq 开启启动报错
    intelij idea 使用maven打包报错 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1
    php foreach循环引用的问题
    手把手编写hyperf JsonRpc demo
    centos8配置nfs教程本机系统mac
    Java基础的练习题
    Java——循环
    Java——数组
  • 原文地址:https://www.cnblogs.com/yzhang-rp-inf/p/10351038.html
Copyright © 2011-2022 走看看