记录编号 |
575293 |
评测结果 |
AAAAAAAAAA |
题目名称 |
孙伯符降临 |
最终得分 |
100 |
用户昵称 |
ムラサメ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.672 s |
提交时间 |
2022-09-08 20:09:55 |
内存使用 |
27.33 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,rec;
int ans[100010],tree[10000010];
struct node{
int a,b,num;
}f[100010];
bool cmp(node x,node y){
if(x.a!=y.a){
return x.a<y.a;
}
if(x.b!=y.b){
return x.b<y.b;
}
return x.num>y.num;
}
int lowbit(int x){
return x&(-x);
}
void prework(int a,int b){
for(int i=a;i<=rec;i+=lowbit(i)){
tree[i]+=b;
}
}
int worksum(int a){
int cnt=0;
for(int i=a;i>0;i-=lowbit(i)){
cnt+=tree[i];
}
return cnt;
}
int main(){
freopen("sunbofu.in","r",stdin);
freopen("sunbofu.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>f[i].a>>f[i].b;
f[i].b++;
f[i].num=i;
rec=max(rec,f[i].b);
}
sort(f+1,f+n+1,cmp);
for(int i=1;i<=n;i++){
ans[f[i].num]=worksum(f[i].b);
prework(f[i].b,1);
}
for(int i=1;i<=n;i++){
cout<<ans[i]<<endl;
}
return 0;
}