思路:
先考虑 Sub1 的部门分,暴力算法:
<blockquote>
暴力询问所有 \(i=mod)?(x+y-mod) x+y)#define lowbit(x) x&(-x)#define pi pair#define pii pair#define iip pair#define ppii pair#define fi first#define se second#define full(l,r,x) for(auto it=l;it!=r;it++) (*it)=x#define Full(a) memset(a,0,sizeof(a))#define open(s1,s2) freopen(s1,"r",stdin),freopen(s2,"w",stdout);#define For(i,l,r) for(int i=l;i=l;i--)using namespace std;typedef double db;typedef unsigned long long ull;typedef long long ll;const int maxn=1e6+10;std::vector ask(std::vector a, std::vector b);int n;vector a,b,h;namespace Sub1{ int cnt=0; int work(){ a.clear(),b.clear(); cnt=0; vector l(n,0),r(n,0); For(i,0,n-1){ l=cnt; For(j,i+1,n-1){ a.push_back(i); b.push_back(j); ++cnt; } r=cnt-1; } h=ask(a,b); For(i,0,n-1){ bool F=1; For(j,l,r){ if(h[j]!=i){ F=0; break; } } if(F) return i; } return 0; }};namespace Sub2{ int cnt=0; int s[maxn]; vector E[maxn]; stack S; int p[]={1000000,500000,250000,125000,62498,20832,3472,183,1}; void solve(int x){ s[x]=a.size(); int n=E[x].size(); For(i,0,n-1){ For(j,i+1,n-1){ a.push_back(E[x]); b.push_back(E[x][j]); } } } int get(int x){ int g=s[x],n=E[x].size(); For(i,0,n-1){ bool F=1; For(j,i+1,n-1) if(h[g++]!=E[x]) F=0; if(F) return E[x]; } return 0; } void get(int X,int Y){ cnt=0; int l=0,cnt=0,g=0,B=X/Y; For(i,1,Y) E.clear(); while(!S.empty()){ ++l; int x=S.top(); S.pop(); if((l-1)/B+1!=cnt) ++cnt; if(cnt |