zoukankan      html  css  js  c++  java
  • 一本通1752:纪念碑

    链接

    扫描线 (+) 双指针,线段树维护区间最大子段长度,注意更新时对叶子的特判。

    #include<bits/stdc++.h>
    #define IL inline
    #define ls k<<1
    #define rs k<<1|1
    #define pb push_back
    #define LL long long
    using namespace std;
    const int N=1e6+10;
    int n,m,k,ans;
    struct hh{
    	int y1,y2,op;
    };
    vector<hh>p[N];
    IL int in(){
    	char c;int f=1;
    	while((c=getchar())<'0'||c>'9')
    	  if(c=='-') f=-1;
    	int x=c-'0';
    	while((c=getchar())>='0'&&c<='9')
    	  x=x*10+c-'0';
    	return x*f;
    }
    IL int max(int x,int y){return x>y?x:y;}
    struct segment{
    	int lx[N<<2],rx[N<<2],mx[N<<2],cnt[N<<2];
    	IL void pushup(int k,int l,int r,int mid){
    		if(cnt[k]){lx[k]=rx[k]=mx[k]=0;return;}
    		if(l==r){lx[k]=rx[k]=mx[k]=1;return;}
    		if(mx[ls]^mid-l+1) lx[k]=lx[ls];else lx[k]=mx[ls]+lx[rs];
    		if(mx[rs]^r-mid) rx[k]=rx[rs];else rx[k]=mx[rs]+rx[ls];
    		mx[k]=max(rx[ls]+lx[rs],max(mx[ls],mx[rs]));
    	}
    	void build(int k,int l,int r){
    		lx[k]=rx[k]=mx[k]=r-l+1,cnt[k]=0;
    		if(l==r) return;
    		int mid=l+r>>1;
    		build(ls,l,mid),build(rs,mid+1,r);
    	}
    	void mdy(int k,int l,int r,int ll,int rr,int op){
    		if(l>=ll&&r<=rr){cnt[k]+=op;pushup(k,l,r,l+r>>1);return;}
    		int mid=l+r>>1;
    		if(ll<=mid) mdy(ls,l,mid,ll,rr,op);
    		if(rr>mid) mdy(rs,mid+1,r,ll,rr,op);
    		pushup(k,l,r,mid);
    	}
    }T;
    int main()
    {
    	int x1,y1,x2,y2;
    	n=in(),m=in(),k=in();
    	T.build(1,1,m);
    	for(int i=1;i<=k;++i){
    		x1=in(),y1=in(),x2=in(),y2=in();
    		p[x1].pb((hh){y1,y2,1}),p[x2].pb((hh){y1,y2,-1});
    	}
    	int l=1,r=1;
    	for(;r<=n;++r){
    		for(int i=0;i<p[r].size();++i)
    		  if(p[r][i].op==1) T.mdy(1,1,m,p[r][i].y1,p[r][i].y2,1);
    		ans=max(ans,min(r-l+1,T.mx[1]));
    		for(;r-l+1>T.mx[1];++l)
    		  for(int i=0;i<p[l].size();++i)
    		    if(p[l][i].op==-1) T.mdy(1,1,m,p[l][i].y1,p[l][i].y2,-1);
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    Tutorial中代码的区别及不同效果
    Session
    代码解析&Filter用户授权例子
    web后台运作过程
    工厂纸杯生产流水线管理系统
    Webservice和EJB
    Week8——hashcode()和equals()方法
    Week7——JSON
    Week6——Lifecycle of JSF and Facelets
    Week5——Ajax
  • 原文地址:https://www.cnblogs.com/yiqiAtiya/p/13915390.html
Copyright © 2011-2022 走看看