답안 #376818

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
376818 2021-03-12T05:01:18 Z YJU Bitaro, who Leaps through Time (JOI19_timeleap) C++14
0 / 100
677 ms 524292 KB
#include<bits/stdc++.h>
#pragma GCC optimize("unroll-loops,no-stack-protector,Ofast")
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pll;
const ll N=3e5+5;
const ll INF=(1LL<<60);
const ld pi=acos(-1);
const ll MOD=1e9+7;
#define REP(i,n) for(int i=0;i<n;++i)
#define REP1(i,n) for(int i=1;i<=n;++i)
#define pb push_back
#define mp make_pair
#define X first
#define Y second
#define lwb lower_bound
#define setp setprecision
#define SZ(_a) (ll)_a.size()

struct ele{
	ll ty,a,b,c;
	//ele(ll _ty,ll _a,ll _b,ll _c):ty(_ty),a(_a),b(_b),c(_c){};
	void out(){
		cout<<ty<<" "<<a<<" "<<b<<" "<<c<<"\n";
	}
};

ele operator +(ele A,ele B){
	if(A.ty==1){
        if(B.ty==1){
			if(A.a>B.b)return ele{2,A.a,B.b,A.c+B.c+(A.a-B.b)};
			else if(A.b<B.a)return ele{2,A.b,B.a,A.c+B.c};
			else return ele{1,max(A.a,B.a),min(A.b,B.b),A.c+B.c};
        }else{
            if(B.a<=A.b&&A.a<=B.a)return ele{2,B.a,B.b,A.c+B.c};
            else if(A.b<B.a)return ele{2,A.b,B.b,A.c+B.c};
            else if(A.a>B.a)return ele{2,A.a,B.b,A.c+B.c+(A.a-B.a)};
        }
	}else{
		if(B.ty==1){
			if(A.b<=B.b&&A.b>=B.a)return ele{2,A.a,A.b,A.c+B.c};
			else if(A.b>B.b)return ele{2,A.a,B.b,A.c+B.c+(A.b-B.b)};
			else if(A.b<B.a)return ele{2,A.a,B.a,A.c+B.c};
		}else{
            return ele{2,A.a,B.b,A.c+B.c+max(A.b-B.a,0LL)};
		}
	}
}

ll L[N],R[N];
ll n,q,x,ans[N];
vector<ll> input[N];
vector<ele> seg(4*N);

void rev(){
	reverse(L+1,L+n);
	reverse(R+1,R+n);
	REP1(i,q){
        if(input[i][0]==1){
            input[i][1]=n-input[i][1];
		}else{
            input[i][1]=n+1-input[i][1];
            input[i][3]=n+1-input[i][3];
		}
	}
}

void build(ll id,ll l,ll r){
	if(l==r-1){seg[id]=ele{1,L[l]-l,R[l]-l-1,0};return ;}
	ll mid=(l+r)>>1;
	build(id*2,l,mid);
	build(id*2+1,mid,r);
	seg[id]=seg[id*2]+seg[id*2+1];
}

void upd(ll id,ll l,ll r,ll to,ele d){
    if(l==r-1){seg[id]=d;return ;}
    ll mid=(l+r)>>1;
    if(to<mid){
		upd(id*2,l,mid,to,d);
    }else{
		upd(id*2+1,mid,r,to,d);
    }
    seg[id]=seg[id*2]+seg[id*2+1];
}

ele query(ll id,ll l,ll r,ll ql,ll qr){
	if(l>=ql&&r<=qr)return seg[id];
    ll mid=(l+r)>>1;
    if(mid>=qr)return query(id*2,l,mid,ql,qr);
    if(mid<=ql)return query(id*2+1,mid,r,ql,qr);
    return query(id*2,l,mid,ql,qr)+query(id*2+1,mid,r,ql,qr);
}

void solve(){
	seg.resize(4*N);
	build(1,1,n);
    //REP1(i,n-1)seg[i]=ele{1,L[i]-i,R[i]-i-1,0};

	REP1(i,q){
		ll T=input[i][0];
        if(T==1){
			ll P=input[i][1],NL=input[i][2],NR=input[i][3];
			upd(1,1,n,P,ele{1,NL-P,NR-P-1,0});
			//seg[P]=ele{1,NL-P,NR-P-1,0};
        }else{
			ll A=input[i][1],B=input[i][2],C=input[i][3],D=input[i][4];
			if(A>C)continue;
			if(A==C){ans[i]=max(B-D,0LL);continue;}

			ele sum=query(1,1,n,A,C);

			B-=A,D-=C;
            if(sum.ty==1){
				ans[i]=sum.c+max(0LL,B-sum.b)+max(0LL,max(sum.a,min(B,sum.b))-D);
            }else{
				ans[i]=sum.c+max(0LL,B-sum.a)+max(0LL,sum.b-D);
            }
        }
	}
}

int main(){
	ios_base::sync_with_stdio(0);cin.tie(0);
	memset(ans,-1,sizeof(ans));
    cin>>n>>q;
    REP1(i,n-1)cin>>L[i]>>R[i];
    REP1(i,q){
		cin>>x;input[i].pb(x);
		if(x==1)REP(j,3)cin>>x,input[i].pb(x);
		else REP(j,4)cin>>x,input[i].pb(x);
    }
    solve();
    rev();
    solve();
    REP1(i,q)if(ans[i]!=-1)cout<<ans[i]<<"\n";
	return 0;
}

Compilation message

timeleap.cpp: In function 'ele operator+(ele, ele)':
timeleap.cpp:49:1: warning: control reaches end of non-void function [-Wreturn-type]
   49 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Correct 27 ms 47340 KB Output is correct
2 Correct 26 ms 47340 KB Output is correct
3 Correct 27 ms 47340 KB Output is correct
4 Correct 28 ms 47340 KB Output is correct
5 Correct 33 ms 47340 KB Output is correct
6 Correct 27 ms 47340 KB Output is correct
7 Correct 27 ms 47340 KB Output is correct
8 Correct 27 ms 47340 KB Output is correct
9 Correct 27 ms 47340 KB Output is correct
10 Correct 27 ms 47340 KB Output is correct
11 Correct 28 ms 47468 KB Output is correct
12 Correct 29 ms 47468 KB Output is correct
13 Correct 29 ms 47468 KB Output is correct
14 Correct 28 ms 47468 KB Output is correct
15 Correct 28 ms 47468 KB Output is correct
16 Correct 28 ms 47468 KB Output is correct
17 Correct 29 ms 47468 KB Output is correct
18 Correct 28 ms 47488 KB Output is correct
19 Correct 28 ms 47468 KB Output is correct
20 Correct 29 ms 47468 KB Output is correct
21 Correct 29 ms 47468 KB Output is correct
22 Correct 29 ms 47468 KB Output is correct
23 Correct 28 ms 47468 KB Output is correct
24 Correct 28 ms 47476 KB Output is correct
25 Correct 29 ms 47468 KB Output is correct
26 Correct 28 ms 47468 KB Output is correct
27 Correct 28 ms 47468 KB Output is correct
28 Correct 29 ms 47468 KB Output is correct
29 Correct 33 ms 47468 KB Output is correct
30 Correct 30 ms 47468 KB Output is correct
31 Correct 29 ms 47468 KB Output is correct
32 Correct 28 ms 47468 KB Output is correct
33 Correct 28 ms 47468 KB Output is correct
34 Correct 28 ms 47468 KB Output is correct
35 Correct 29 ms 47468 KB Output is correct
36 Correct 29 ms 47468 KB Output is correct
37 Correct 29 ms 47468 KB Output is correct
38 Correct 28 ms 47468 KB Output is correct
39 Correct 30 ms 47468 KB Output is correct
40 Correct 29 ms 47488 KB Output is correct
41 Runtime error 312 ms 524292 KB Execution killed with signal 9
# 결과 실행 시간 메모리 Grader output
1 Correct 608 ms 81264 KB Output is correct
2 Correct 583 ms 94316 KB Output is correct
3 Correct 594 ms 94492 KB Output is correct
4 Correct 620 ms 94112 KB Output is correct
5 Correct 597 ms 94956 KB Output is correct
6 Correct 617 ms 94752 KB Output is correct
7 Correct 599 ms 94956 KB Output is correct
8 Correct 617 ms 95944 KB Output is correct
9 Correct 596 ms 94444 KB Output is correct
10 Correct 600 ms 94956 KB Output is correct
11 Correct 677 ms 95068 KB Output is correct
12 Correct 625 ms 95724 KB Output is correct
13 Correct 611 ms 95848 KB Output is correct
14 Runtime error 322 ms 524292 KB Execution killed with signal 9
# 결과 실행 시간 메모리 Grader output
1 Correct 27 ms 47340 KB Output is correct
2 Correct 26 ms 47340 KB Output is correct
3 Correct 27 ms 47340 KB Output is correct
4 Correct 28 ms 47340 KB Output is correct
5 Correct 33 ms 47340 KB Output is correct
6 Correct 27 ms 47340 KB Output is correct
7 Correct 27 ms 47340 KB Output is correct
8 Correct 27 ms 47340 KB Output is correct
9 Correct 27 ms 47340 KB Output is correct
10 Correct 27 ms 47340 KB Output is correct
11 Correct 28 ms 47468 KB Output is correct
12 Correct 29 ms 47468 KB Output is correct
13 Correct 29 ms 47468 KB Output is correct
14 Correct 28 ms 47468 KB Output is correct
15 Correct 28 ms 47468 KB Output is correct
16 Correct 28 ms 47468 KB Output is correct
17 Correct 29 ms 47468 KB Output is correct
18 Correct 28 ms 47488 KB Output is correct
19 Correct 28 ms 47468 KB Output is correct
20 Correct 29 ms 47468 KB Output is correct
21 Correct 29 ms 47468 KB Output is correct
22 Correct 29 ms 47468 KB Output is correct
23 Correct 28 ms 47468 KB Output is correct
24 Correct 28 ms 47476 KB Output is correct
25 Correct 29 ms 47468 KB Output is correct
26 Correct 28 ms 47468 KB Output is correct
27 Correct 28 ms 47468 KB Output is correct
28 Correct 29 ms 47468 KB Output is correct
29 Correct 33 ms 47468 KB Output is correct
30 Correct 30 ms 47468 KB Output is correct
31 Correct 29 ms 47468 KB Output is correct
32 Correct 28 ms 47468 KB Output is correct
33 Correct 28 ms 47468 KB Output is correct
34 Correct 28 ms 47468 KB Output is correct
35 Correct 29 ms 47468 KB Output is correct
36 Correct 29 ms 47468 KB Output is correct
37 Correct 29 ms 47468 KB Output is correct
38 Correct 28 ms 47468 KB Output is correct
39 Correct 30 ms 47468 KB Output is correct
40 Correct 29 ms 47488 KB Output is correct
41 Runtime error 312 ms 524292 KB Execution killed with signal 9