#include #include #include #include #include #include #include using namespace std; const double Pi = acos(-1.0); struct complex{ double r,i; complex(double _r = 0.0 , double _i = 0.0){r = _r , i = _i;} complex operator+(const complex &b){ return complex(r+b.r,i+b.i);} complex operator-(const complex &b){ return complex(r-b.r,i-b.i);} complex operator * (const complex &b){ return complex(r*b.r-i*b.i,r*b.i+i*b.r);}}; void change(vector &y){ int ln=y.size(); for(int i=1,j=ln>>1;i>1; while(j>=k){ j-=k; k>>=1;} j+=k;}} void fft(vector &y,int on){ change(y); int len=y.size(); for(int m=2;m<=len;m<<=1){ complex wm(cos(-on*2*Pi/m),sin(-on*2*Pi/m)); for(int k=0;k mult(vector a,vector b){ int len=1; int la=a.size(); int lb=b.size(); while(len x1(len); vector x2(len); for(int i=0;i sol(len); for(int i=0;i19 || ( cnt==19 && fi>1) )); } else if(g==endd){ if(is_neg){ x= -x; } assert(l<=x && x<=r); return x; } else { assert(false); } } } string readString(int l,int r,char endd){ string ret=""; int cnt=0; while(true){ char g=getchar(); assert(g!=-1); if(g==endd){ break; } cnt++; ret+=g; } assert(l<=cnt && cnt<=r); return ret; } long long readIntSp(long long l,long long r){ return readInt(l,r,' '); } long long readIntLn(long long l,long long r){ return readInt(l,r,'\n'); } string readStringLn(int l,int r){ return readString(l,r,'\n'); } string readStringSp(int l,int r){ return readString(l,r,' '); } int n,m; int list[100100][3]; int row[100100]; int col[100100]; int dia[200200]; long long solve_oneCol(){ long long num_row=0; long long num_col=0; long long ret = 0; vector rw(n+1),cl(n+1); for(int i=0;i<=n;i++){ rw[i]=row[i]; cl[i]=col[i]; } vector h=mult(rw,cl); for(int i=2;i<=2*n;i++){ if(dia[i]==0)continue; ret += h[i]; } for(int i=1;i<=n;i++){ num_row += row[i]; num_col += col[i]; row[i] += row[i-1]; col[i] += col[i-1]; } ret+=num_row * n + num_col * n - num_row * num_col; for(int i=2;i<=2*n;i++){ if(dia[i]==0)continue; if(i <= n+1){ ret += i -1; ret -= row[i-1]; ret -= col[i-1]; } else { ret += n - (i - n-1); ret -= row[n] - row[i - n-1]; ret -= col[n] - col[i - n-1]; } } return ret; } void reset(){ for(int i=1;i<=n;i++){ col[i]=row[i]=0; } for(int i=2;i<=2*n;i++){ dia[i]=0; } } int main(){ n=readIntSp(1,100000); m=readIntLn(1,100000); for(int i=0;i