zoukankan      html  css  js  c++  java
  • bzoj3809 Gty的二逼妹子序列

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    #define N 100005
    
    int n,m,block,blo[N];
    int s[N],ans[N*10],sum[N],cnt[N];
    
    char ch;
    void read(int &x)
    {
        x=0;
        do ch=getchar();
        while(ch<'0'||ch>'9');
        do x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
        while(ch>='0'&&ch<='9');
    }
    
    struct node
    {
    	int l,r,id,a,b;
    }q[N*10];
    
    bool cmp(node x,node y)
    {
    	if(blo[x.l]==blo[y.l]) return x.r<y.r;
    	return x.l<y.l;
    }
    
    int query(int l,int r)
    {
    	int t=0;
    	int Min=min(blo[l]*block,r);
    	for(int i=l;i<=Min;i++) t+=(sum[i]>0);
    	if(blo[l]!=blo[r])
    		for(int i=(blo[r]-1)*block+1;i<=r;i++) t+=(sum[i]>0);
    	for(int i=blo[l]+1;i<=blo[r]-1;i++) t+=cnt[i];
    	return t;
    }
    
    void change(int x,int f)
    {
    	if(f>0)
    	{
    		if(!sum[s[x]]) cnt[blo[s[x]]]++;
    		sum[s[x]]++;		
    	}
    	else
    	{
    		sum[s[x]]--;
    		if(!sum[s[x]]) cnt[blo[s[x]]]--;
    	}
    }
    
    int main()
    {
    	read(n);read(m);block=sqrt(n);
        for(int i=1;i<=n;i++) read(s[i]),blo[i]=(i-1)/block+1;
        for(int i=1;i<=m;i++) read(q[i].l),read(q[i].r),read(q[i].a),read(q[i].b),q[i].id=i;
    	sort(q+1,q+1+m,cmp);
    	int pl=1,pr=0;
    	for(int i=1;i<=m;i++)
    	{
    		int id=q[i].id;
    		if(q[i].l==q[i].r) {ans[id]=(s[q[i].l]>=q[i].a&&s[q[i].l]<=q[i].b);continue;}
    		if(q[i].r>pr)
    			for(int j=pr+1;j<=q[i].r;j++) change(j,1);
    		else
    			for(int j=pr;j>q[i].r;j--) change(j,-1);
    		if(q[i].l<pl)
    			for(int j=pl-1;j>=q[i].l;j--) change(j,1);
    		else
    			for(int j=pl;j<q[i].l;j++) change(j,-1);
    		pr=q[i].r;pl=q[i].l;
    		ans[id]=query(q[i].a,q[i].b);
    	}
    	for(int i=1;i<=m;i++) printf("%d
    ",ans[i]);
    	return 0;
    }
    
  • 相关阅读:
    adb devices检测不到夜神模拟器
    adb devices检测不到夜神模拟器
    adb devices检测不到夜神模拟器
    epoll里面mmap释疑
    epoll里面mmap释疑
    epoll里面mmap释疑
    epoll里面mmap释疑
    Redis数据迁移的三个方法
    Redis数据迁移的三个方法
    MySQL:由USE DB堵塞故障引发的思考
  • 原文地址:https://www.cnblogs.com/XYZinc/p/8567019.html
Copyright © 2011-2022 走看看