# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
336544 | katearima | 거래 (IZhO13_trading) | C++14 | 480 ms | 7532 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;
const int N=300005;
const int M=300005;
int m,n,l,r;
ll tree[4*N],x,ans;
void update(int i, int a, int b, int l, int r, int x){
if(r<a || l>b) return;
if( a>=l && b<=r) {
int k=a-l+x;
if(tree[i]>k) return;
tree[i]=k;
return;
}
int mid=(a+b)/2;
if(a!=b){
update(2*i+1, a, mid, l, r, x);
update(2*i+2, mid+1,b, l , r, x);
}
}
void findmx(int i, int a, int b, int x){
if(x<a || x>b) return;
if(x==a && x==b) {
ans=tree[i];
return;
}
int mid=(a+b)/2;
if(tree[i]!=0 && a!=b){
ll k=tree[i];
tree[2*i+1]=max(tree[2*i+1], k);
tree[2*i+2]=max(tree[2*i+2], k+(mid+1-a));
tree[i]=0;
}
if(a!=b){
findmx(2*i+1, a, mid, x);
findmx(2*i+2, mid+1, b, x);
}
}
main(){
cin>>n>>m;
for(int i=0; i<m; i++){
cin>>l>>r>>x;
l--; r--;
update(0, 0, n-1, l, r, x);
}
for(int i=0; i<n; i++){
ans=0;
findmx(0,0,n-1,i);
cout<<ans<<" ";
}
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |