HDU 4217 Data Structure?(线段树版)
线段树 不熟啊。。。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 262145
__int64 sum;
struct node
{
int l;
int r;
__int64 v;
}p[4*N];
void push(int rt)
{
p[rt].v = p[rt<<1].v+p[rt<<1|1].v;
}
void build(int l,int r,int rt)
{
int m;
p[rt].l = l;
p[rt].r = r;
if(l == r)
{
p[rt].v = 1;
return ;
}
m = (l + r)>>1;
build(l,m,rt<<1);
build(m+1,r,rt<<1|1);
push(rt);
}
void update(int pos,int l,int r,int rt)
{
int m;
if(l == r)
{
sum += l;
p[rt].v = 0;
return ;
}
m = (l +r)>>1;
if(pos > p[rt<<1].v)
{
update(pos-p[rt<<1].v,m+1,r,rt<<1|1);
}
else
{
update(pos,l,m,rt<<1);
}
push(rt);
}
int main()
{
int i,n,m,t,num = 0,s;
scanf("%d",&t);
while(t--)
{
memset(p,0,sizeof(p));
num ++;
sum = 0;
scanf("%d",&n);
build(1,n,1);
scanf("%d",&m);
for(i = 1;i <= m;i ++)
{
scanf("%d",&s);
update(s,1,n,1);
}
printf("Case %d: %I64d\n",num,sum);
}
return 0;
}

浙公网安备 33010602011771号