zoukankan      html  css  js  c++  java
  • Codeforces Round #665 (Div. 2) E. Divide Square

    题意:1e6*1e6的坐标系,给一堆水平和垂直的线,问分割的区域个数

    保证线一定和边界有交点,且同一个x/y只有一条线

    交点数+完全切割线数+1即为ans

    求交点就是经典的扫描线了,用了树状数组

    #include<bits/stdc++.h>
    
    using namespace std;
    
    inline int rd(){
    	int ret=0,f=1;char c;
    	while(c=getchar(),!isdigit(c))f=c=='-'?-1:1;
    	while(isdigit(c))ret=ret*10+c-'0',c=getchar();
    	return ret*f;
    }
    #define pc putchar
    #define space() pc(' ')
    #define nextline() pc('
    ')
    void pot(int x){if(!x)return;pot(x/10);pc('0'+x%10);}
    void out(int x){if(!x)pc('0');if(x<0)pc('-'),x=-x;pot(x);}
    
    const int UP = 1000000;
    const int MAXN = 1000005;
    int t[MAXN];
    void modify(int x,int y){
    	while(x<MAXN){t[x]+=y;x+=(x&-x);}
    }
    int query(int x){
    	int ret=0;
    	while(x){ret+=t[x];x-=x&-x;}
    	return ret;	
    }
    
    struct Node{
    	int x,y,w;
    	bool operator < (const Node &rhs) const {
    		return x < rhs.x;
    	}
    	Node(int xx=0,int yy=0,int ww=0){x=xx;y=yy;w=ww;}
    }node[MAXN];
    
    struct Line{
    	int x,l,r;
    	bool operator < (const Line &rhs) const{
    		return x<rhs.x;
    	}
    	Line(int xx=0,int ll=0,int rr=0){x=xx;l=ll;r=rr;}
    }line[MAXN];
    
    int n,m,num;
    long long ans;
    
    int main(){
    	n=rd();m=rd();
    	int y,l,r;
    	for(int i=1;i<=n;i++){
    		y=rd();l=rd();r=rd();
    		if(l==0&&r==UP) ans++;
    		node[++num]=Node(l,y,1);
    		node[++num]=Node(r+1,y,-1);
    	}
    	for(int i=1;i<=m;i++){
    		line[i].x = rd();
    		line[i].l = rd();
    		line[i].r = rd();
    		if(line[i].l==0&&line[i].r==UP) ans++;	
    	}
    	sort(line+1,line+1+m);
    	sort(node+1,node+1+num);
    	for(int i=1,j=0;i<=m;i++){
    		while(j<(n<<1)&&node[j+1].x <= line[i].x){
    			j++;
    			modify(node[j].y+1,node[j].w);
    		}
    		ans+=query(line[i].r+1)-query(line[i].l);
    	}
    	cout<<ans+1;
    	return 0;
    }
    
    
  • 相关阅读:
    Android中的5种数据存储方式
    Android Service
    Android BroadcastReceiver
    Android Intent
    Android Fragment
    Android 教学实验计划1
    【Android教学用例程序】计算器
    Android UI 基础知识
    Android 控件
    Android 计算器布局测试2
  • 原文地址:https://www.cnblogs.com/ghostcai/p/13549832.html
Copyright © 2011-2022 走看看