Advertisement
Morass

BGSHOOT

Sep 9th, 2017
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.28 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define PB push_back
  4. #define ZERO (1e-10)
  5. #define INF (1<<29)
  6. #define CL(A,I) (memset(A,I,sizeof(A)))
  7. #define DEB printf("DEB!\n");
  8. #define D(X) cout<<"  "<<#X": "<<X<<endl;
  9. #define EQ(A,B) (A+ZERO>B&&A-ZERO<B)
  10. typedef long long ll;
  11. typedef pair<ll,ll> pll;
  12. typedef vector<int> vi;
  13. typedef pair<int,int> ii;
  14. typedef vector<ii> vii;
  15. #define IN(n) int n;scanf("%d",&n);
  16. #define FOR(i, m, n) for (int i(m); i < n; i++)
  17. #define F(n) FOR(i,0,n)
  18. #define FF(n) FOR(j,0,n)
  19. #define FT(m, n) FOR(k, m, n)
  20. #define aa first
  21. #define bb second
  22. void ga(int N,int *A){F(N)scanf("%d",A+i);}
  23. #define MX (400001)
  24. ll H[1<<25],W;
  25. struct SA{
  26.     ll *A,*S,*X,*M;
  27.     int N;
  28.     void ini(int n){
  29.         N=1<<(int(log2(n)-ZERO)+1);
  30.         A=H+W,W+=N*2,S=H+W,W+=N*2;
  31.         X=H+W,W+=N*2,M=H+W,W+=N*2;
  32.         F(N<<1)A[i]=S[i]=X[i]=0,M[i]=1;
  33.     }
  34.     void gt(int u,ll&s,ll&x,ll&m,int b,int e){
  35.         if(M[u]>X[u])m=x=A[u],s=(e-b+1)*A[u];
  36.         else m=M[u]+A[u],x=X[u]+A[u],s=S[u]+A[u]*(e-b+1);
  37.     }
  38.     void st(int b,int e,ll v=0){st(b,e,v,1,0,N-1);}
  39.     void st(int b,int e,ll v,int u,int B,int E){
  40.         if(B>e||E<b)return;
  41.         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;
  42.         if(b<=B&&e>=E){M[u]=1,X[u]=0,A[u]=v;return;}
  43.         ll U,V,W;
  44.         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;
  45.         st(b,e,v,u<<1,B,(B+E)>>1),st(b,e,v,u<<1|1,(B+E)/2+1,E);
  46.         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);
  47.         S[u]+=U,X[u]=max(X[u],V),M[u]=min(M[u],W);
  48.     }
  49.     void ad(int b,int e,ll v=1){ad(b,e,v,1,0,N-1);}
  50.     void ad(int b,int e,ll v,int u,int B,int E){
  51.         if(B>e||E<b)return;
  52.         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];
  53.         if(M[u]>X[u])gt(u,S[u],X[u],M[u],B,E),A[u]=0;
  54.         if(b<=B&&e>=E){A[u]+=v;return;}
  55.         ll U,V,W;
  56.         ad(b,e,v,u<<1,B,(B+E)>>1),ad(b,e,v,u<<1|1,(B+E)/2+1,E);
  57.         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);
  58.         S[u]+=U,X[u]=max(X[u],V),M[u]=min(M[u],W);
  59.     }
  60.     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);}
  61.     void gt(int b,int e,int u,int B,int E,ll&s,ll&x,ll&m){
  62.         if(B>e||E<b)return;
  63.         ll U=-1e18,V=1e18,W;
  64.         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);
  65.         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)
  66.             ,x=max(x,U+A[u]),m=min(m,V+A[u]),s+=A[u]*(1+min(e,E)-max(b,B));
  67.     }
  68.     ll mx(int b,int e){ll u,v,w;return gt(b,e,u,v,w),v;}
  69.     ll mn(int b,int e){ll u,v,w;return gt(b,e,u,v,w),w;}
  70.     ll sm(int b,int e){ll u,v,w;return gt(b,e,u,v,w),u;}
  71. }G;
  72. #define CLR (W=0)
  73. unordered_map<int,int> Z;
  74. int N,Q,L,B[MX],E[MX],F[MX],T[MX],A[MX],l;
  75. void rnm(int*A,int N){
  76.     static int B[MX];
  77.     memcpy(B,A,N<<2);
  78.     sort(B,B+N),l=unique(B,B+N)-B;
  79.     F(l)Z[B[i]]=i;
  80.     F(N)A[i]=Z[A[i]];
  81. }
  82. int main(void){
  83.     scanf("%d",&N);
  84.     F(N)scanf("%d%d",B+i,E+i),A[L++]=B[i],A[L++]=E[i];
  85.     scanf("%d",&Q);
  86.     F(Q)scanf("%d%d",F+i,T+i),A[L++]=F[i],A[L++]=T[i];
  87.     rnm(A,L),G.ini(l);
  88.     F(N)G.ad(Z[B[i]],Z[E[i]]);
  89.     F(Q)printf("%lld\n",G.mx(Z[F[i]],Z[T[i]]));
  90.     return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement