• HDU


    题意:

      给一个数列${ a_i }$,一些询问$(l_i,r_i,h_i)$,求$jin [l_i,r_i] ,a_j<=h_i$的元素数量

    题解:

      问区间内$<=h$的个数 等于是询问$[l,r]$区间内$[0,upperbound(h)]$的元素个数,就可以

      (实际上我写的是查询区间内$[a,b]$范围内元素的个数)

      对于整个区间,很明显是类似权值线段树的逆序对问题,而对于$[l,r]$,利用主席树的可减性进行求解即可

    #include <bits/stdc++.h>
    #define nd seg[now]
    #define ndp seg[pre]
    #define mid ((s+t)>>1)
    using namespace std;
    const int maxn=1e5+10;
    int casn,n,m,k;
    int num[maxn],rt[maxn],size,pos[maxn];
    struct node{
    	int l,r,sum;
    }seg[maxn*20];
    void maketree(int s=1,int t=n,int &now=rt[0]){
    	now=++size;nd={s,t,0};
    	if(s==t) return ;
    	maketree(s,mid,nd.l);maketree(mid+1,t,nd.r);
    }
    void update(int &now,int pre,int k,int s=1,int t=n){
    	now=++size;nd=ndp,nd.sum++;
    	if(s==t) return ;
    	if(k<=mid)update(nd.l,ndp.l,k,s,mid);
    	else update(nd.r,ndp.r,k,mid+1,t);
    }
    int query(int now,int pre,int l,int r,int s=1,int t=n){
    	if(l>t||r<s||l>r) return 0;
    	if(l<=s&&r>=t) return ndp.sum-nd.sum;
    	return query(nd.l,ndp.l,l,r,s,mid)+query(nd.r,ndp.r,l,r,mid+1,t);
    }
    int main(){
    	scanf("%d",&casn);
    	int tt=0;
    	while(casn--){
    		scanf("%d%d",&k,&m);
    		size=0;
    		for(int i=1;i<=k;i++){
    			scanf("%d",num+i);
    			pos[i]=num[i];
    		}
    		sort(pos+1,pos+1+k);
    		n=unique(pos+1,pos+1+k)-pos;
    		maketree();
    		for(int i=1;i<=k;i++){
    			int id=lower_bound(pos+1,pos+1+n,num[i])-pos;
    			update(rt[i],rt[i-1],id);
    		}
    		printf("Case %d:
    ",++tt);
    		while(m--){
    			int a,b,c;
    			scanf("%d%d%d",&a,&b,&c);
    			a++,b++;
    			int k=upper_bound(pos+1,pos+1+n,c)-pos;
    			if(pos[k]>c)k--;
    			printf("%d
    ",query(rt[a-1],rt[b],0,k));
    		}
    	}
      return 0;
    }
    

      

  • 相关阅读:
    关于IE缓存的解决方案(HTML,JSP,ASP,PHP,C#)(转)
    ASP.NET 2.0 中的客户端脚本
    Post和Get的区别(兼谈页面间传值的方式)(转)
    委托的小例子
    JS的正则表达式
    HTTP消息头
    asp.net一个onclick的全过程(简单写一下)
    location.reload() 和 location.replace()的区别和应用
    使用 .NET Framework 2.0 在您的应用程序中支持证书(转)
    页面动态注册脚本(小技巧)
  • 原文地址:https://www.cnblogs.com/nervendnig/p/9201161.html
Copyright © 2020-2023  润新知