随便出一个 m≥2×105 的数据即可把第一篇和第三篇题解卡掉(数组开小也能过……)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef double D;
const int N=1e5+5,Mod=100000;
int n=100000,m=200000;
LL ran(){
LL ans=2147483647;
return ans*rand()%Mod+1;
}
LL a[N];
bool vis[N];
int main(){
freopen("hack.in","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
struct _timeb T;
_ftime(&T);
srand(T.millitm);
cout<<n<<" "<<m<<"\n";
int B=sqrt(n)-10;
for(int i=1;i<=B;i++){
int val=ran();
if(i&1) val*=-1;
for(int j=1;j<=B;j++){
int id=ran(),cnt=0;
while(vis[id]){
id=ran();
cnt++;
if(cnt>=5000){
for(int k=1;k<=n;k++){
if(!vis[k]){
id=k;
break;
}
}
}
}
a[id]=val;
vis[id]=1;
}
}
for(int i=1;i<=n;i++){
if(!vis[i]) a[i]=ran();
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<"1 100000\n";
for(int i=1;i<m;i++){
int x=ran(),y=ran();
if(y<x) swap(x,y);
cout<<x<<" "<<y<<"\n";
}
return 0;
}
/*
hack.out找其他题解(如第二遍)即可
*/