# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
5397 | baneling100 | 거래 (IZhO13_trading) | C++98 | 244 ms | 5184 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <stdio.h>
int n, m, nn, l, r, x, idx[1048576];
void index_tree(int left, int right, int now)
{
int mid;
if(l<=left && right<=r)
{
if(idx[now]<x+left-l)
idx[now]=x+left-l;
}
else
{
mid=(left+right)/2;
if(l<=mid)
index_tree(left,mid,2*now);
if(mid+1<=r)
index_tree(mid+1,right,2*now+1);
}
}
void input(void)
{
int i;
scanf("%d %d",&n,&m);
for(nn=1 ; nn<n ; nn*=2);
for(i=1 ; i<=m ; i++)
{
scanf("%d %d %d",&l,&r,&x);
index_tree(1,nn,1);
}
}
void clean(int left, int right, int now)
{
int mid=(left+right)/2;
if(left<right)
{
if(idx[now]>0)
{
if(idx[2*now]<idx[now])
idx[2*now]=idx[now];
if(idx[2*now+1]<idx[now]+mid-left+1)
idx[2*now+1]=idx[now]+mid-left+1;
}
clean(left,mid,2*now);
clean(mid+1,right,2*now+1);
}
}
void output(void)
{
int i;
for(i=nn ; i<=nn+n-1 ; i++)
printf("%d ",idx[i]);
}
int main(void)
{
int i;
input();
clean(1,nn,1);
output();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |