比赛 |
2019.3.13 |
评测结果 |
AAAAAAAAAA |
题目名称 |
飘雪圣域 |
最终得分 |
100 |
用户昵称 |
AloneLight |
运行时间 |
2.085 s |
代码语言 |
C++ |
内存使用 |
28.92 MiB |
提交时间 |
2019-05-07 10:11:00 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,q,fa[200005],l[200005],r[200005],cnt,res[200005],bit[200005];
vector<int>g[200005];
void upd(int x,int v){for(;x<=200000;x+=x&-x)bit[x]+=v;}
int qry(int x){int r=0;for(;x;x-=x&-x)r+=bit[x];return r;}
int sum(int l,int r){return qry(r+1)-qry(l);}
struct qq{int t,k,id;bool operator<(const qq& r)const{return (t!=r.t)?t<r.t:((k!=r.k)?k<r.k:id<r.id);}}a[600005];
void dfs(int x,int p){fa[x]=p;for(int i=0;i<g[x].size();i++)if(g[x][i]!=p)dfs(g[x][i],x);}
int main()
{
freopen("icekingdom.in","r",stdin);
freopen("icekingdom.out","w",stdout);
scanf("%d%d",&n,&q);
for(int i=1,u,v;i<n;i++){scanf("%d%d",&u,&v);u--;v--;g[u].push_back(v);g[v].push_back(u);}
dfs(0,-1);
for(int i=1;i<n;i++)a[cnt++]=(qq){fa[i],0,i};
for(int i=0;i<q;i++){scanf("%d %d",&l[i],&r[i]);l[i]--,r[i]--;a[cnt++]=(qq){l[i],-1,i};a[cnt++]=(qq){r[i],1,i};}
sort(a,a+cnt);
for(int i=0;i<cnt;i++)if(a[i].k==0)upd(a[i].id+1,1);else res[a[i].id]+=a[i].k*sum(l[a[i].id],r[a[i].id]);
for(int i=0;i<q;i++)printf("%d\n",r[i]-l[i]+1-res[i]);
return 0;
}