#include #include #include using namespace std; const long long step = 320; long long N, M, aa, bb, cc, a, b, Q; pair el[100001]; int apa[321][100000]; vector > torol; int d[100001]; int hol(int x, int s){ if(apa[s][x]<0) return x; return (apa[s][x] = hol(apa[s][x],s)); } void unio(int x, int y, int s){ torol.push_back({x,apa[s][x]}); torol.push_back({y,apa[s][y]}); if(apa[s][x] < apa[s][y]){ apa[s][y] = x; } else { if(apa[s][x]==apa[s][y]) apa[s][y]--; apa[s][x] = y; } } long long ans[100000]; int ki[100000]; pair kerd[100000]; struct pont{ long long a, b; long long e, l; pont* bal; pont* jobb; }; pont* fa; pont* epit(int x, int y){ pont* p = new pont; pont* bf = NULL; pont* jf = NULL; p->a = x; p->b = y; p->e = 0; p->l = 0; if(x!=y){ bf = epit(x,(x+y)/2); jf = epit((x+y)/2+1,y); } p->bal = bf; p->jobb = jf; return p; } long long val(pont* p){ return (p->e + p->l * (p->b - p->a + 1)); } void le(pont* p){ (p->bal)->l += p->l; (p->jobb)->l += p->l; p->l = 0; } void be(pont* p){ if(aa<=p->a && p->b<=bb){ p->l += cc; return; } le(p); if(aa<=(p->a+p->b)/2) be(p->bal); if(bb>(p->a+p->b)/2) be(p->jobb); p->e = val(p->bal) + val(p->jobb); } long long ker(pont* p){ if(aa<=p->a && p->b<=bb) return val(p); le(p); long long a1 = 0, b1 = 0; if(aa<=(p->a+p->b)/2) a1 = ker(p->bal); if(bb>(p->a+p->b)/2) b1 = ker(p->jobb); p->e = val(p->bal) + val(p->jobb); return a1+b1; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> N >> M; for(int i=1; i<=M; i++){ cin >> el[i].first >> el[i].second; el[i].first--; el[i].second--; } for(int i=0; i=aa; j--){ int fa = hol(a,j), fb = hol(b,j); if(fa!=fb){ tart = j; unio(fa,fb,j); } else { aa = j+1; break; } } int start = tart*step-1; if(tart==bb+1){ tart = step; start = i; } else { d[i] = tart*step; } torol.clear(); //cout << "ITT" << start << ' ' << tart << endl; for(int j=start; j>0; j--){ a = el[j].first, b = el[j].second; int fa = hol(a,tart), fb = hol(b,tart); if(fa!=fb){ d[i] = j; unio(fa,fb,tart); } else { break; } } reverse(torol.begin(),torol.end()); for(pair j:torol) apa[tart][j.first] = j.second; d[i] = max(d[i],1); if(i%step==0){ a = el[i].first, b = el[i].second; unio(a,b,i/step); } } /*for(int i=1; i<=M; i++){ cout << d[i] << ' '; } cout << endl;*/ cin >> Q; for(int i=0; i> kerd[i].second >> kerd[i].first; ki[i] = i; } sort(ki,ki+Q); int tart = 1; fa = epit(1,M); for(int i=0; i