Codeforces Round #615 (Div. 3)

D.
What is real food too? ? ?
Segment tree constant big point, then stuck ... I do not is to use a struct Well ... how the ... out of the question a man Han Han ...
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;
}
Had wanted to find the location of the minimum value of the interval with the above code, I'm afraid it is Han Han. 555 struct then returned too slow ...
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); 
}

This is not like a direct Well ...
Hey, then looked at the rankings, from rk400 become rk1200.
Make a div3 can become rk1200 of who else besides me ...
#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;	
}
Published 64 original articles · won praise 29 · views 663

Guess you like

Origin blog.csdn.net/Dove_xyh/article/details/104073805