HUD-4217-Data Structure?
7959 ワード
//題意はあなたに1-nの数をあげて、毎回K番目の小さい数を削除して、これらの数の和//を削除することを求めます
ACコード:
ACコード:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
const int MAX=262145; int sum[MAX<<2]; void build(int l,int r,int rt) {
sum[rt]=r-l+1;//
if(l==r) { return; } int m=(l+r)>>1;
build(lson);
build(rson); } int updata(int x,int l,int r,int rt) {
sum[rt]--; if(l==r) { return l; } int m=(l+r)>>1; if(sum[rt<<1]>=x)
updata(x,lson); else
updata(x-sum[rt<<1],rson);//x-sum[rt<<1]
} int main() { int t;
scanf("%d",&t); int k=1; while(t--) { int n,m;
scanf("%d%d",&n,&m);
build(1,n,1); int i; int x;
LL s=0; for(i=1;i<=m;i++) {
scanf("%d",&x);
s+=updata(x,1,n,1); }
printf("Case %d: %lld
",k++,s); } return 0; }