zoukankan      html  css  js  c++  java
  • HDU 4325 Contest 3

    很明显的区间加减单点查询。但由于规模大,于是离散化。在离散化的时候,可以把要查询的点也加入离散化的数组中。

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #define lowbit(x) ((x)&(-x))
    #define LL __int64
    using namespace std;
    
    int tpoint[400010];
    int save[100010];
    int a[400020];
    
    struct flower{
    	int bgn,en;
    }TF[100010];
    int np,al;
    
    int sum(int x){
      int s=0;
      for(;x;x-=lowbit(x))s+=a[x];
      return s;
    }
    
    void update(int x,int w){
      for(;x<=np;x+=lowbit(x))
      a[x]+=w;
    }
    
    int find(int p){
    	int l=1,r=np;
    	while(l<=r){
    		int mid=(l+r)/2;
    		if(tpoint[mid]==p)
    		return mid;
    		else if(tpoint[mid]<p)
    		l=mid+1;
    		else if(tpoint[mid]>p)
    		r=mid-1;
    	}
    }
    
    int main(){
    	int T,n,m,p,su,kase=0; int pos;;
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d%d",&n,&m);
    		np=1;
    		memset(a,0,sizeof(a));
    		for(int i=1;i<=n;i++){
    			scanf("%d%d",&TF[i].bgn,&TF[i].en);
    			tpoint[np++]=TF[i].bgn; tpoint[np++]=TF[i].en;
    		}
    		for(int i=1;i<=m;i++){
    			scanf("%d",&p);
    			tpoint[np++]=p;
    			save[i]=p;
    		}
    		sort(tpoint+1,tpoint+np);
    		np=unique (tpoint+1, tpoint + np) - tpoint;
    		for(int i=1;i<=n;i++){
    			int f=find(TF[i].bgn);
    			int b=find(TF[i].en);
    			update(f,1);
    			update(b+1,-1);
    		}
    		printf("Case #%d:
    ",++kase);
    		for(int i=1;i<=m;i++){
    			pos=find(save[i]);
    			printf("%d
    ",sum(pos));
    		}
    	}
    }
    

      

  • 相关阅读:
    Linux文件管理系统
    添加硬盘分区
    SWPFILE实现(增加swap空间)
    磁盘配额
    javascript插件uploadify简单实现文件上传
    Java继承--子类的实例化过程
    Java继承--子父类中的构造函数
    Java继承--覆盖
    设计模式——单例设计模式
    在vim中,使用可视化拷贝(剪切)粘贴文本
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4086034.html
Copyright © 2011-2022 走看看