#include #include #include #include #include #include #include #include #pragma comment(linker, "/STACK:102400000,102400000") using namespace std; #define print(x) cout<>x #define SIZE 100100 struct BIT { int baum[SIZE]; void init() { memset(baum,0,sizeof(baum)); } inline int lowbit(int x) { return x&(-x); } void add(int x,int val) { while(x0) { res+=baum[x]; x-=lowbit(x); } return res; } int sum(int l,int r) { return sum(r)-sum(l-1); } }; struct query { int l,r,id; query(){} query(int il,int ir,int iid) { l=il;r=ir;id=iid; } friend bool operator < (const query& a,const query& b) { return a.r pl[SIZE]; vector g[SIZE]; int lson[SIZE],rson[SIZE],val[SIZE]; int cnt,ind; void dfs(int now,int father) { lson[now]=rson[now]=++ind; val[now]=w[now]; for(int i=0;i<(int)g[now].size();i++) { int next=g[now][i]; if(next!=father) { dfs(next,now); rson[now]=rson[next]; } } } int main() { int T,a,b; BIT bit; query ask[SIZE]; int ans[SIZE]; map mp; input(T); int cas=1; while(T--) { bit.init(); cnt=ind=0; mp.clear(); memset(ans,0,sizeof(ans)); for(int i=0;i=k) { if(sz==k) { bit.add(pl[v][sz-k],1); } if(sz>k) { bit.add(pl[v][sz-k-1],-2); bit.add(pl[v][sz-k],1); } } while(ask[ptr].r==i) { int id=ask[ptr].id; ans[id]=bit.sum(ask[ptr].l,ask[ptr].r); ptr++; } } printf("Case #%d:\n",cas++); for(int i=0;i