zoukankan      html  css  js  c++  java
  • poj2481 Cows

    题目链接:https://vjudge.net/problem/POJ-2481

    题意:给定一些区间,问对于每个区间,有多少个其他区间把它包含(两个完全相同的区间不算)

    对左端点排序,然后对右端点用求逆序对的方法,顺着扫一遍记录左边有多少个右端点大于等于它就可以了。一个坑点就是区间完全相同的情况

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    const int N=1e5;
    struct st{int l,r,pos;}a[N+10];
    int c[N+10],ans[N+10],n,i,j,k;
    
    bool cmp(st p,st q){return (p.l==q.l)?p.r>q.r:p.l<q.l;} //*
    void add(int x,int y){
    	for (int i=x;i<=N;i+=i&(-i)) c[i]+=y;
    }
    int ask(int x){
    	int res=0;
    	for (int i=x;i>0;i-=i&(-i)) res+=c[i];
    	return res; 
    }
    
    int main(){
    	while (scanf("%d",&n)){
    	  if (n==0) break;
    	  memset(c,0,sizeof(c));
    	  for (i=1;i<=n;i++) {
    	    scanf("%d%d",&a[i].l,&a[i].r);
    	    a[i].pos=i;
          }
    	  sort(a+1,a+n+1,cmp); 
    	  for (i=1;i<=n;i++){
    	  	int j=i;
    	  	while (a[j].l==a[j-1].l&&a[j].r==a[j-1].r) j--;
    	  	ans[a[i].pos]=ask(N)-ask(a[i].r-1)-(i-j);
    	  	add(a[i].r,1);
    	  }
    	  for (i=1;i<=n-1;i++) printf("%d ",ans[i]);
    	  printf("%d
    ",ans[n]);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    产生半透明效果的步骤
    突发奇想
    特征提取
    matlab计算混淆矩阵
    feature selection
    PCA in OriginPro 8.6
    计算局部方差
    最下生成树原理
    点击图像获取RGB
    区域填充算法
  • 原文地址:https://www.cnblogs.com/edmunds/p/13657666.html
Copyright © 2011-2022 走看看