Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define PB push_back
- #define ZERO (1e-10)
- #define INF (1<<29)
- #define CL(A,I) (memset(A,I,sizeof(A)))
- #define DEB printf("DEB!\n");
- #define D(X) cout<<" "<<#X": "<<X<<endl;
- #define EQ(A,B) (A+ZERO>B&&A-ZERO<B)
- typedef long long ll;
- typedef pair<ll,ll> pll;
- typedef vector<int> vi;
- typedef pair<int,int> ii;
- typedef vector<ii> vii;
- #define IN(n) int n;scanf("%d",&n);
- #define FOR(i, m, n) for (int i(m); i < n; i++)
- #define F(n) FOR(i,0,n)
- #define FF(n) FOR(j,0,n)
- #define FT(m, n) FOR(k, m, n)
- #define aa first
- #define bb second
- void ga(int N,int *A){F(N)scanf("%d",A+i);}
- #define MX (400001)
- ll H[1<<25],W;
- struct SA{
- ll *A,*S,*X,*M;
- int N;
- void ini(int n){
- N=1<<(int(log2(n)-ZERO)+1);
- A=H+W,W+=N*2,S=H+W,W+=N*2;
- X=H+W,W+=N*2,M=H+W,W+=N*2;
- F(N<<1)A[i]=S[i]=X[i]=0,M[i]=1;
- }
- void gt(int u,ll&s,ll&x,ll&m,int b,int e){
- if(M[u]>X[u])m=x=A[u],s=(e-b+1)*A[u];
- else m=M[u]+A[u],x=X[u]+A[u],s=S[u]+A[u]*(e-b+1);
- }
- void st(int b,int e,ll v=0){st(b,e,v,1,0,N-1);}
- void st(int b,int e,ll v,int u,int B,int E){
- if(B>e||E<b)return;
- if(M[u]>X[u]&&B^E)M[u<<1|1]=M[u<<1]=1,X[u<<1|1]=X[u<<1]=0,A[u<<1|1]=A[u<<1]=A[u],A[u]=0;
- if(b<=B&&e>=E){M[u]=1,X[u]=0,A[u]=v;return;}
- ll U,V,W;
- if(A[u])ad(B,E,A[u],u<<1,B,(B+E)>>1),ad(B,E,A[u],u<<1|1,(B+E)/2+1,E),A[u]=0;
- st(b,e,v,u<<1,B,(B+E)>>1),st(b,e,v,u<<1|1,(B+E)/2+1,E);
- gt(u<<1,S[u],X[u],M[u],B,(B+E)>>1),gt(u<<1|1,U,V,W,(B+E)/2+1,E);
- S[u]+=U,X[u]=max(X[u],V),M[u]=min(M[u],W);
- }
- void ad(int b,int e,ll v=1){ad(b,e,v,1,0,N-1);}
- void ad(int b,int e,ll v,int u,int B,int E){
- if(B>e||E<b)return;
- if(M[u]>X[u]&&B^E)M[u<<1|1]=M[u<<1]=1,X[u<<1|1]=X[u<<1]=0,A[u<<1|1]=A[u<<1]=A[u];
- if(M[u]>X[u])gt(u,S[u],X[u],M[u],B,E),A[u]=0;
- if(b<=B&&e>=E){A[u]+=v;return;}
- ll U,V,W;
- ad(b,e,v,u<<1,B,(B+E)>>1),ad(b,e,v,u<<1|1,(B+E)/2+1,E);
- gt(u<<1,S[u],X[u],M[u],B,(B+E)>>1),gt(u<<1|1,U,V,W,(B+E)/2+1,E);
- S[u]+=U,X[u]=max(X[u],V),M[u]=min(M[u],W);
- }
- void gt(int b,int e,ll&s,ll&x,ll&m){s=0,x=-1e18,m=1e18;gt(b,e,1,0,N-1,s,x,m);}
- void gt(int b,int e,int u,int B,int E,ll&s,ll&x,ll&m){
- if(B>e||E<b)return;
- ll U=-1e18,V=1e18,W;
- if(X[u]<M[u]||(b<=B&&e>=E))gt(u,U,V,W,max(b,B),min(e,E)),s+=U,x=max(x,V),m=min(m,W);
- else gt(b,e,u<<1,B,(B+E)>>1,s,U,V),gt(b,e,u<<1|1,(B+E)/2+1,E,s,U,V)
- ,x=max(x,U+A[u]),m=min(m,V+A[u]),s+=A[u]*(1+min(e,E)-max(b,B));
- }
- ll mx(int b,int e){ll u,v,w;return gt(b,e,u,v,w),v;}
- ll mn(int b,int e){ll u,v,w;return gt(b,e,u,v,w),w;}
- ll sm(int b,int e){ll u,v,w;return gt(b,e,u,v,w),u;}
- }G;
- #define CLR (W=0)
- unordered_map<int,int> Z;
- int N,Q,L,B[MX],E[MX],F[MX],T[MX],A[MX],l;
- void rnm(int*A,int N){
- static int B[MX];
- memcpy(B,A,N<<2);
- sort(B,B+N),l=unique(B,B+N)-B;
- F(l)Z[B[i]]=i;
- F(N)A[i]=Z[A[i]];
- }
- int main(void){
- scanf("%d",&N);
- F(N)scanf("%d%d",B+i,E+i),A[L++]=B[i],A[L++]=E[i];
- scanf("%d",&Q);
- F(Q)scanf("%d%d",F+i,T+i),A[L++]=F[i],A[L++]=T[i];
- rnm(A,L),G.ini(l);
- F(N)G.ad(Z[B[i]],Z[E[i]]);
- F(Q)printf("%lld\n",G.mx(Z[F[i]],Z[T[i]]));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement