台州做网站软件,网站做外链多少钱,软件技术有学做网站吗,wordpress文章分类加权限解析
先考虑n2的情况 可以利用一个空队在不超过5m的操作次数下把两个满队还原 如何推广#xff1f; 考虑分治 把[l,mid]的球看成同色#xff0c;[mid1,r]的球看成同色 在左右两两匹配柱子进行n2的还原操作 最后在递归处理 操作次数#xff1a;5mnlogn
代码
#includeb…解析
先考虑n2的情况 可以利用一个空队在不超过5m的操作次数下把两个满队还原 如何推广 考虑分治 把[l,mid]的球看成同色[mid1,r]的球看成同色 在左右两两匹配柱子进行n2的还原操作 最后在递归处理 操作次数5mnlogn
代码
#includebits/stdc.h
using namespace std;
#define ll long long
const int N2e620000;
const int mod998244353;
inline ll read() {ll x0,f1;char cgetchar();while(!isdigit(c)) {if(c-)f-1;cgetchar();}while(isdigit(c)) {x(x1)(x3)c-0;cgetchar();}return x*f;
}
int n,m;
int a[55][405],num[405];
int from[N],to[N],tot;
bool ok[55];
void print(){printf(print:\n);for(int i1;in1;i){printf([%d]:,i);for(int j1;jnum[i];j) printf(%d ,a[i][j]);printf(\n);}printf(\n);
}
inline void move(int x,int y){//printf(move:%d-%d\n,x,y);assert(num[x]);assert(num[y]m);tot;from[tot]x;to[tot]y;a[y][num[y]]a[x][num[x]--];//print();//if(tot%10000) fprintf(stderr,%d\n,tot);
}
void solve(int l,int r){if(lr) return;int mid(lr)1;//fprintf(stderr,(%d %d)\n,l,r);//print();memset(ok,0,sizeof(ok));for(int il;imid;i){for(int jmid1;jr;j){//printf(i%d j%d\n,i,j);if(ok[i]||ok[j]) continue;int ss0;for(int k1;km;k){ssa[i][k]mid;ssa[j][k]mid;}int s0;for(int k1;km;k) sa[i][k]mid;for(int k1;ks;k) move(j,n1);while(num[i]){if(a[i][num[i]]mid) move(i,j);else move(i,n1);}for(int k1;ks;k) move(j,i);for(int k1;km-s;k) move(n1,i);for(int k1;km-s;k) move(j,n1);for(int k1;km-s;k) move(i,j);if(ssm){for(int k1;km;k){if(a[n1][num[n1]]midnum[i]m) move(n1,i);else move(n1,j);}ok[i]1;}else{for(int k1;km;k){if(a[n1][num[n1]]midnum[j]m) move(n1,j);else move(n1,i);}ok[j]1; }}}solve(l,mid);solve(mid1,r);return;
}
int main() {#ifndef ONLINE_JUDGEfreopen(a.in,r,stdin);freopen(a.out,w,stdout);#endifnread();mread();for(int i1;in;i){num[i]m;for(int j1;jm;j) a[i][j]read();}//print();solve(1,n);printf(%d\n,tot);for(int i1;itot;i) printf(%d %d\n,from[i],to[i]);return 0;
}