제출 #1189343

#제출 시각아이디문제언어결과실행 시간메모리
1189343Batorgil952원숭이와 사과 나무 (IZhO12_apple)C++20
100 / 100
178 ms113064 KiB
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair

using namespace std;

struct node{
	int l;
	int r;
	int val=0;
	int has=0;
	node *le=nullptr;
	node *ri=nullptr;
};

void update(node *&curr, int l, int r, int ql, int qr){
	if(!curr) curr=new node();
	if(qr<l || r<ql) return;
	if(curr->val==r-l+1){
		return;
	}
	if(ql<=l && r<=qr){
		curr->val=r-l+1;
		return;
	}
	int mid=(l+r)/2;
	update(curr->le, l, mid, ql, qr);
	update(curr->ri, mid+1, r, ql, qr);
	curr->val=curr->le->val+curr->ri->val;
}

void prop(node *&curr, int l, int r){
	if(!curr) curr=new node();
	if(l==r){
		return;
	}
	if(!(curr->le)){
		curr->le=new node();
	}
	if(!(curr->ri)){
		curr->ri=new node();
	}
	int mid=(l+r)/2;
	if(curr->val==r-l+1){
		curr->le->val=mid-l+1;
		curr->ri->val=r-(mid+1)+1;
	}
	if(curr->val==0){
		curr->le->val=0;
		curr->ri->val=0;
	}
}

int query(node *curr, int l, int r, int ql, int qr){
	if(qr<l || r<ql) return 0;
	if(ql<=l && r<=qr) return curr->val;
	int mid=(l+r)/2;
	prop(curr, l, r);
	int kk=query(curr->le, l, mid, ql, qr)+query(curr->ri, mid+1, r, ql, qr);
	return kk;
}

int main(){
	int q, c, x, y, z;
	
	node *root=nullptr;
	
	scanf("%d",&q);
	
	c=0;
	while(q--){
		scanf("%d",&x);
		scanf("%d",&y);
		scanf("%d",&z);
		y+=c;
		z+=c;
		if(x==1){
			c=query(root, 1, 1000000000, y, z);
			printf("%d\n", c);
		}
		else{
			update(root, 1, 1000000000, y, z);
		}
	}
	
	
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

apple.cpp: In function 'int main()':
apple.cpp:69:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   69 |         scanf("%d",&q);
      |         ~~~~~^~~~~~~~~
apple.cpp:73:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   73 |                 scanf("%d",&x);
      |                 ~~~~~^~~~~~~~~
apple.cpp:74:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |                 scanf("%d",&y);
      |                 ~~~~~^~~~~~~~~
apple.cpp:75:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   75 |                 scanf("%d",&z);
      |                 ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...