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<<30)
- #define LINF (1LL<<60)
- #define NINF -INF
- #define CL(A,I) (memset(A,I,sizeof(A)))
- #define add(A,B) (g[A].PB(B),g[B].PB(A))
- #define ADD(A,B,V) (add(A,B),v[A].PB(V),v[B].PB(V))
- #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;
- #define REP(i, n) for (int i = 0; i < n; i++)
- #define F(W) REP(i,W)
- #define FF(W) REP(j,W)
- #define FT(I,W) for(int k(I);k<W;++k)
- #define IN(n) int n; cin >> n;
- #define PR(A,X) (X?A.second:A.first)
- #define MX (1<<16)
- #define MD(C,B) ((C)>=0?(C)%(B):((B)-(-(C))%(B))%B)
- ll tt,N,a[MX],b[MX],c[MX];
- void kal(ll *a,ll *b,ll L,ll *c,ll *v,ll *w,ll h,ll m){
- if(h>=m)return;
- if(L<=8){
- F(L)FF(L)c[i+j]+=a[i]*b[j];
- return;
- }
- ll d(L>>1),*A=v,*B=w;
- v=v+L,w=w+L;
- F(L)A[i]=B[i]=0;
- kal(a,b,d,A,v,w,h,m);
- kal(a+d,b+d,d,B,v,w,h+d,m);
- F(L)c[i]+=A[i],c[i+L]+=B[i],c[i+d]-=A[i]+B[i];
- F(d)A[i]=a[i]+a[i+d],B[i]=b[i]+b[i+d];
- kal(A,B,d,c+d,v,w,h,m);
- }
- ll kar(ll *a,ll A,ll *b,ll B,ll *c){
- static ll V[MX],W[MX];
- ll l(max(A,B)),N(1);
- while(N<l)N<<=1;
- FT(A,N)a[k]=0;
- FT(B,N)b[k]=0;
- F(N<<1)c[i]=0;
- kal(a,b,N,c,V,W,0,min(A,B));
- return (A+B)-1;
- }
- int main(void){
- for(scanf("%lld",&tt);tt--;){
- scanf("%lld",&N);++N;
- F(N)scanf("%lld",a+i);
- F(N)scanf("%lld",b+i);
- ll h(kar(a,N,b,N,c));
- F(h)printf("%lld%c",c[i],i+1==h?'\n':' ');
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment