又是二分题,熟用lower_bound与upper_bound就好了,其实也可以离散化然后前缀和的。
#include<bits/stdc++.h>
#define N 100000
using namespace std;
int n,m;
int A[N+5];
int x,y,l,r;
inline char nc()
{
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
int x=0,b=1;
char c=nc();
for(;!(c<='9'&&c>='0');c=nc())if(c=='-')b=-1;
for(;c<='9'&&c>='0';c=nc())x=x*10+c-'0';
return x*b;
}
int main()
{
freopen("in.txt","r",stdin);
n=read(),m=read();
for(int i=1;i<=n;i++)A[i]=read();
sort(A+1,A+n+1);
for(int i=1;i<=m;i++)
{
x=read(),y=read();
l=upper_bound(A+1,A+n+1,x-1)-A;
r=upper_bound(A+1,A+n+1,y)-A-1;
printf("%d\n",r-l+1);
}
return 0;
}
又被cout卡了。。