#include #include #include using namespace std; const int MaxVal=50000,MaxDif=10000; struct str { int a,b,poz; bool operator <(const str &aux) const { return b > v[MaxVal+10]; int sum4[MaxVal+10],sum7[MaxVal+10],val[MaxVal+10],vaz[MaxDif+10]; long long sol[50010]; void precalc() { for(int i=1;i<=MaxVal;i++) { sum4[i]=sum4[i-1]; sum7[i]=sum7[i-1]; for(int x=i;x;x/=10) if(x%10==4) sum4[i]++; else if(x%10==7) sum7[i]++; } for(int i=1;i<=MaxVal;i++) val[i]=sum4[i]-sum7[i]; } int main() { //freopen("file.in", "r", stdin); //freopen("file.out", "w", stdout); precalc(); int n,a,b; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&a,&b); v[a-1].push_back({b,i}); } int rad=224; for(int st=0;st<=MaxVal;st+=rad) { int dr=min(st+rad-1,MaxVal); vector op; for(int i=st;i<=dr;i++) for(vector >::iterator it=v[i].begin();it!=v[i].end();it++) op.push_back({i,it->first,it->second}); sort(op.begin(),op.end()); for(int i=0;i<=MaxDif;i++) vaz[i]=0; long long nr=0; int x=0,y=-1; for(vector::iterator it=op.begin();it!=op.end();it++) { for(int i=y+1;i<=it->b;i++) { nr+=vaz[val[i]]; vaz[val[i]]++; } y=it->b; if(it->a=it->a;i--) { nr+=vaz[val[i]]; vaz[val[i]]++; } } else { for(int i=x;ia;i++) { vaz[val[i]]--; nr-=vaz[val[i]]; } } x=it->a; sol[it->poz]=nr; } } for(int i=1;i<=n;i++) printf("%lld\n",sol[i]); return 0; }