• [BZOJ1176][Balkan2007]Mokia(CDQ分治)


    对于一个询问显然通过前缀和的思想可以拆开成4个询问,

    还有题目读入的那个S是没有任何用处的...

    然后CDQ分治就可以做了

    Code

    #include <cstdio>
    #include <algorithm>
    #define lowbit(x) ((x)&(-x))
    #define N 200010
    using namespace std;
    
    struct info{
    	int x,y,opx,v,pa;
    	friend bool operator <(info a,info b){
    		return (a.x==b.x)?a.opx<b.opx:a.x<b.x;
    	}
    }A[N],tmp[N];
    int n,T[N*10],na,mx,Ans[N];
    
    inline int read(){
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    
    void add(int x,int v){for(;x<=mx;x+=lowbit(x))T[x]+=v;}
    int query(int x){int r=0;for(;x;x-=lowbit(x))r+=T[x];return r;}
    
    void Init(){
    	mx=read(),mx=read();
    	for(int opx=read();opx!=3;opx=read()){
    		if(opx&1) A[++n].x=read(),A[n].y=read(),A[n].v=read(),A[n].opx=0;
    		else{
    			int x1=read(),y1=read(),x2=read(),y2=read();
    			A[++n].x=x2,A[n].y=y2,A[n].v=1,A[n].opx=1,A[n].pa=++na;
    			A[++n].x=x1-1,A[n].y=y1-1,A[n].v=1,A[n].opx=1,A[n].pa=na;
    			A[++n].x=x1-1,A[n].y=y2,A[n].v=-1,A[n].opx=1,A[n].pa=na;
    			A[++n].x=x2,A[n].y=y1-1,A[n].v=-1,A[n].opx=1,A[n].pa=na;
    		}		
    	}
    }
    
    void solve(int l,int r){
    	if(l==r) return;
    	int m=(l+r)>>1;
    	solve(l,m),solve(m+1,r);
    	int p=l,q=m+1,cnt=l;	
    	while(p<=m||q<=r)
    		if(q>r||p<=m&&A[p]<A[q]){if(!A[p].opx) add(A[p].y,A[p].v);tmp[cnt++]=A[p++];}
    		else{if(A[q].opx) Ans[A[q].pa]+=A[q].v*query(A[q].y);tmp[cnt++]=A[q++];}
    	for(int i=l;i<=m;++i) if(!A[i].opx) add(A[i].y,-A[i].v);
    	for(int i=l;i<=r;++i) A[i]=tmp[i];
    }
    
    int main(){
    	Init();
    	solve(1,n);
    	for(int i=1;i<=na;++i)printf("%d
    ",Ans[i]);
    	return 0;
    }
    
  • 相关阅读:
    HTC G12 HBOOT 2.0.0002 官解、降级精简教程!
    android call require api level
    刷机流程
    Android通过tcpdump抓包
    [原创]c#的线性表 Virus
    [原创]c++线性表的插入 Virus
    [原创]关于编程论坛封我ID的意见 Virus
    [原创]文件管理 Virus
    [原创]c#高级编程学习笔记(连载_委托) Virus
    [原创]c#中的内存管理 Virus
  • 原文地址:https://www.cnblogs.com/void-f/p/9082751.html
Copyright © 2020-2023  润新知