답안 #976550

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
976550 2024-05-06T17:20:02 Z Batorgil952 이상한 기계 (APIO19_strange_device) C++14
0 / 100
262 ms 524288 KB
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
 
using namespace std;
 
const ll N=2e7+7;
struct Node{
	ll l;
	ll r;
	ll vl=-1;
	ll vr=-1;
	ll val=0;
};
Node tree[N];
ll K;
 
ll GCD(ll x, ll y){
	while(x*y!=0){
		if(x>y) x%=y;
		else y%=x;
	}
	return x+y;
}
 
void update(ll v, ll ql, ll qr){
	if(tree[v].val==tree[v].r-tree[v].l+1){
		return;
	}
	if(qr<tree[v].l && tree[v].r<ql){
		return;
	}
	if(ql<=tree[v].l && tree[v].r<=qr){
		tree[v].val=tree[v].r-tree[v].l+1;
		return;
	}
	ll mid=(tree[v].l+tree[v].r)/2;
	if(qr<=mid){
		if(tree[v].vl==-1){
			K++;
			tree[v].vl=K;
			tree[tree[v].vl].l=tree[v].l;
			tree[tree[v].vl].r=mid;
			update(tree[v].vl, ql, qr);
		}
		else if(tree[tree[v].vl].val!=mid-tree[v].l+1){
			update(tree[v].vl, ql, qr);
		}
	}
	else if(mid+1<=ql){
		if(tree[v].vr==-1){
			K++;
			tree[v].vr=K;
			tree[tree[v].vr].l=mid+1;
			tree[tree[v].vr].r=tree[v].r;
			update(tree[v].vr, ql, qr);
		}
		else if(tree[tree[v].vr].val!=tree[v].r-mid){
			update(tree[v].vr, ql, qr);
		}
	}
	else{
		if(tree[v].vl==-1){
			K++;
			tree[v].vl=K;
			tree[tree[v].vl].l=tree[v].l;
			tree[tree[v].vl].r=mid;
			update(tree[v].vl, ql, qr);
		}
		else if(tree[tree[v].vl].val!=mid-tree[v].l+1){
			update(tree[v].vl, ql, qr);
		}
		if(tree[v].vr==-1){
			K++;
			tree[v].vr=K;
			tree[tree[v].vr].l=mid+1;
			tree[tree[v].vr].r=tree[v].r;
			update(tree[v].vr, ql, qr);
		}
		else if(tree[tree[v].vr].val!=tree[v].r-mid){
			update(tree[v].vr, ql, qr);
		}
	}
	tree[v].val=tree[tree[v].vl].val+tree[tree[v].vr].val;
//	cout<<v<<" "<<ql<<" "<<qr<<" "<<tree[v].l<<" "<<tree[v].r<<" "<<tree[v].val<<endl;
	
}
 
ll query(ll v, ll l, ll r){
	return tree[v].val;
}
 
 
int main(){
	ll n, i, A, B, l, r, k, m, ma;
	
	scanf("%lld",&n);
	scanf("%lld",&A);
	scanf("%lld",&B);
	
	m=GCD(B+1, A);
	A/=m;
	ma=1000000000000000002;
	if(ma/A<B){
		k=ma;
	}
	else{
		k=A*B;
	}
//	cout<<k<<endl;
	
	tree[0].l=0;
	tree[0].r=k-1;
	K=0;
	for(i=1; i<=n; i++){
		scanf("%lld",&l);
		scanf("%lld",&r);
		if(r-l+1>=k) update(0, 0, k-1);
		else{
			if(l%k<=r%k){
				update(0, l%k, r%k);
			}
			else{
				update(0, l%k, k-1);
				update(0, 0, r%k);
			}
		}
	}
	
	printf("%lld\n", query(0, 0, k-1));
	
	return 0;
}

Compilation message

strange_device.cpp: In function 'int main()':
strange_device.cpp:98:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   98 |  scanf("%lld",&n);
      |  ~~~~~^~~~~~~~~~~
strange_device.cpp:99:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   99 |  scanf("%lld",&A);
      |  ~~~~~^~~~~~~~~~~
strange_device.cpp:100:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  100 |  scanf("%lld",&B);
      |  ~~~~~^~~~~~~~~~~
strange_device.cpp:117:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  117 |   scanf("%lld",&l);
      |   ~~~~~^~~~~~~~~~~
strange_device.cpp:118:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  118 |   scanf("%lld",&r);
      |   ~~~~~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 262 ms 524288 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 137 ms 524288 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 137 ms 524288 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 136 ms 524288 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 136 ms 524288 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 136 ms 524288 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 141 ms 524288 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 262 ms 524288 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -