디.
실제 음식은 너무 무엇입니까? ? ?
세그먼트 트리 상수 큰 포인트는 다음 붙어 ... 나는 질문의 구조체 음 ... 어떻게 ... 밖으로 사람 한한을 사용하는 것입니다하지 않습니다 ...
node query(int k,int l,int r)
{
if (l==r)
{
node u;
u.x=minn[k]; u.pos=l;
return u;
}
int mid=l+r>>1;
node u,v;
u=query(k<<1,l,mid);
v=query(k<<1|1,mid+1,r);
if (u.x<=v.x) return u;
else return v;
}
위의 코드와 간격의 최소 값의 위치를 찾을 싶었다 나는 한한입니다 두려워. 555 구조체는 너무 느린 반환 ...
int query(int k,int l,int r)
{
if (l==r) return l;
int mid=l+r>>1;
int u,v;
if (minn[k<<1]<=minn[k<<1|1]) return query(k<<1,l,mid);
else return query(k<<1|1,mid+1,r);
}
이것은 직접 음과 같은 아니지만 ...
이봐, 다음 rk400 될 rk1200에서 순위 보았다.
div3 나 외에 누가 다른 사람의 rk1200 될 수 있는지 확인 ...
#include <bits/stdc++.h>
using namespace std;
const int N=4e5+5;
int n,x;
int a[N],sum[N];
int minn[N<<2];
void change(int k,int l,int r,int pos)
{
if (l==pos && pos==r)
{
minn[k]++;
return;
}
int mid=l+r>>1;
if (pos<=mid) change(k<<1,l,mid,pos);
else change(k<<1|1,mid+1,r,pos);
minn[k]=min(minn[k<<1],minn[k<<1|1]);
}
int query(int k,int l,int r)
{
if (l==r) return l;
int mid=l+r>>1;
int u,v;
if (minn[k<<1]<=minn[k<<1|1]) return query(k<<1,l,mid);
else return query(k<<1|1,mid+1,r);
}
int main(){
scanf("%d%d",&n,&x);
for (register int i=1; i<=n; ++i) scanf("%d",&a[i]);
int maxn=0;
for (register int i=1; i<=n; ++i)
{
change(1,0,x-1,a[i]%x);
int mul=minn[1];
int pos;
if (mul*x<i) pos=query(1,0,x-1);
else pos=0;
int now=mul*x+pos;
printf("%d\n",now);
}
return 0;
}