제출 #1030579

#제출 시각아이디문제언어결과실행 시간메모리
1030579Gray원숭이와 사과 나무 (IZhO12_apple)C++17
100 / 100
26 ms3184 KiB
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <functional>
#include <ios>
#include <iostream>
#include <map>
#include <ratio>
#include <set>
#include <string>
#include <vector>
#define ll long long
#define ull unsigned long long int
#define ld double
#define ln "\n"
#define ff first
#define ss second
using namespace std;
 
const ll inf=2e18;
 
void setio(string io=""){
	#ifndef LOCAL
	if (io.length()){
		freopen((io+".in").c_str(), "r", stdin);
		freopen((io+".out").c_str(), "w", stdout);
		return;
	}
	#endif
	ios_base::sync_with_stdio(0); cin.tie(nullptr);
}
 
struct Node{
	Node *left, *right;
	ll val, full;
	Node(){
		left=right=nullptr;
		val=full=0;
	}
	Node(ll _val, ll _full){
		left=right=nullptr;
		val=_val;
		full=_full;
	}
	void preprocess(ll tl, ll tr){
		ll tm = (tl+tr)/2;
		if (left and left->val!=(tm-tl+1)){
			left->val=(tm-tl+1);
		}

	}
	void update(ll tl, ll tr, ll l, ll r){
		if (full or l>r) return;
		else if (tl==l and tr==r){
			val=tr-tl+1;
			full=1;
		}else{
			ll tm = (tl+tr)/2;
			if (!left) left=new Node;
			left->update(tl, tm, l, min(r, tm));
			if (!right) right=new Node;
			right->update(tm+1, tr, max(tm+1, l), r);
			val=left->val+right->val;
		}
	}
	ll query(ll l, ll r, ll tl, ll tr){
		if (l>r) return 0;
		else if (l==tl and r==tr){
			return val;
		}else if (full) return r-l+1;
		else{
			ll tm = (tl+tr)/2;
			ll ans=0;
			// preprocess(tl, tr);
			if (left) ans+=left->query(l, min(r, tm), tl, tm);
			if (right) ans+=right->query(max(l, tm+1), r, tm+1, tr);
			return ans;
		}
	}
};
 
void solve(){
	Node tr;
	ll l=1, r=1e9;
	ll q; cin >> q;
	ll c=0;
	while (q--){
		ll t, x, y; cin >> t >> x >> y;
		if (t==1){
			c = tr.query(x+c, y+c, l, r);
			cout << c << ln;
		}else{
			tr.update(l, r, x+c, y+c);
		}
	}
}
 
int main(){
	setio();
	ll t=1;
	// cin >> t;
	while (t--) solve();
}

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

apple.cpp: In function 'void setio(std::string)':
apple.cpp:25:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |   freopen((io+".in").c_str(), "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
apple.cpp:26:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   26 |   freopen((io+".out").c_str(), "w", stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...