#include "cstdio"
#include "iostream"
#include "algorithm"
using namespace std;
const int maxn = 262155;
int Tree[maxn+10];
inline int lowbit(int x){
return (x&-x);
}
void add(int x,int value){
for(int i=x;i<=maxn;i+=lowbit(i))
Tree[i]+=value;
}
int get(int x){
int sum=0;
for(int i=x;i;i-=lowbit(i))
sum+=Tree[i];
return sum;
}
int main(){
int t;
int n,k;
scanf("%d",&t);
int kase=1;
while(t--){
scanf("%d%d",&n,&k);
long long ans=0;
int loc;
for(int i=1;i<=n;i++){
Tree[i]=lowbit(i);
}
while(k--){
scanf("%d",&loc);
int l=1,r=n,m;
while(l<r){
m=(l+r)>>1;
if(get(m)>=loc) r=m;
else l=m+1;
}
ans+=l;
add(l,-1);
}
cout<<"Case "<<kase++<<": "<<ans<<endl;
}
return 0;
}
HDU 4217 Data Structure?
最新推荐文章于 2020-10-26 06:57:46 发布