锯锯锯锯锯锯锯锯锯锯锯锯锯锯
 分析
  牛客评测机挺快。这道题,千万不要无脑开1e8的数组(比如我),把所有的询问离线下来,以次数为关键字排一个序,然后就按顺序扫着走,记录答案即可
 
 代码
 #include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
const int mod=1e9+7;
ll n,tot;
ll ans[N],cnt[N];
struct nkl
{
    ll x,id;
}s[N<<2];
inline void add(ll i,ll x)
{
    s[++tot].id=i;
    s[tot].x=x;
}
inline bool god(nkl xx,nkl yy)
{
    return xx.x<yy.x;
}
inline ll get(ll x,ll y)
{
    ll ret=1;
    for (;y;y>>=1,x=x*x%mod)
        if(y&1) ret=ret*x%mod;
    return ret;
}
int main()
{
    scanf("%lld",&n);
    for (ll i=1;i<=n;i++)
    {
        ll x,y;
        scanf("%lld%lld",&x,&y);
        add(i,x);add(i,y);
    }sort(s+1,s+tot+1,god);
    ll now=1,st=0;
    for (ll i=1;i<=tot;i++)
    {
        while(st<s[i].x)
            ++st,now=(now*now+now)%mod;
        if(!ans[s[i].id]) ans[s[i].id]=now;
        else ans[s[i].id]=now*get(ans[s[i].id],mod-2)%mod;
    }
    for (ll i=1;i<=n;i++) printf("%lld\n",ans[i]);
    return 0;
}