#include<cstdio> #include<algorithm> #include<vector> using namespace std; /*犯了一个很低级的错误。代码参考大佬*/ const int Kmax=1e5+10; int n; int sum[Kmax]; struct node{ int a,b,ord,res; node(int _a,int _b,int _ord,int _res=0): a(_a),b(_b),ord(_ord),res(_res){} }; bool cmp(const node& a,const node& b){ return a.a<b.a; } bool cmp_back(const node& a,const node& b){ return a.ord<b.ord; } inline int lowbit(int x){ return x&-x; } void add(int x){ while (x<=n) { sum[x]++; x+=lowbit(x); } } int getsum(int x){ int ans=0; while (x) { ans+=sum[x]; x-=lowbit(x); } return ans; } vector<node> table; vector<int> v; int main(){ int m; int t; scanf("%d%d",&n,&m); v.push_back(0); for(int i=0;i<n;i++){ scanf("%d",&t); v.push_back(t); } int a,b,order=0; for(int i=0;i<m;i++){ scanf("%d%d",&a,&b); table.push_back({a,b,order++}); } sort(table.begin(),table.end(),cmp); for(int i=1,p=0;p<m; p++){ while(i<=table[p].a){ add(v[i]); i++; } table[p].res=getsum(table[p].b); } sort(table.begin(),table.end(),cmp_back); for(int i=0;i<m;i++){ printf("%d\n",table[i].res); } return 0; }
树状数组之暂时不想注释
猜你喜欢
转载自blog.csdn.net/weixin_39145990/article/details/80055210
今日推荐
周排行