답안 #671674

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
671674 2022-12-13T13:14:18 Z tolbi 원숭이와 사과 나무 (IZhO12_apple) C++17
0 / 100
420 ms 262144 KB
#pragma optimize("Bismillahirrahmanirrahim")
//█▀█─█──█──█▀█─█─█
//█▄█─█──█──█▄█─█■█
//█─█─█▄─█▄─█─█─█─█
//Allahuekber
//ahmet23 orz...
//Sani buyuk Osman Pasa Plevneden cikmam diyor.
//FatihSultanMehmedHan
//YavuzSultanSelimHan
//AbdulhamidHan
#define author tolbi
#include <bits/stdc++.h>
#define endl '\n'
#define vint(x) vector<int> x
#define deci(x) int x;cin>>x;
#define decstr(x) string x;cin>>x;
#define cinarr(x) for (auto &it : x) cin>>it;
#define coutarr(x) for (auto &it : x) cout<<it<<" ";cout<<endl;
#define sortarr(x) sort(x.begin(),x.end())
#define sortrarr(x) sort(x.rbegin(),x.rend())
#define det(x) cout<<"NO\0YES"+x*3<<endl;
#define INF LONG_LONG_MAX
#define rev(x) reverse(x.begin(),x.end());
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define tol(bi) (1LL<<((int)(bi)))
const int MOD = 1e9+7;
using namespace std;
mt19937 ayahya(chrono::high_resolution_clock().now().time_since_epoch().count());
struct SegTree{
	struct Node{
		int val, lnode, rnode, lazy;
		Node():lnode(-1),rnode(-1),val(0),lazy(0){}
	};
	vector<Node> segtree;
	SegTree(){
		segtree.push_back(Node());
		segtree[0].val=0;
		segtree[0].lazy=0;
	}
	void lyap(int node, int tarl, int tarr){
		int mid = tarl+(tarr-tarl)/2;
		if (segtree[node].lnode==-1){
			segtree[node].lnode=segtree.size();
			segtree.push_back(Node());
		}
	}
	void ryap(int node, int tarl, int tarr){
		int mid = tarl+(tarr-tarl)/2;
		if (segtree[node].rnode==-1){
			segtree[node].rnode=segtree.size();
			segtree.push_back(Node());
		}
	}
	void dallan(int node, int tarl, int tarr){
		if (segtree[node].lazy==1){
			lyap(node, tarl, tarr);
			ryap(node, tarl, tarr);
			segtree[segtree[node].lnode].lazy=1;
			segtree[segtree[node].rnode].lazy=1;
			segtree[node].val=tarr-tarl+1;
		}
		segtree[node].lazy=0;
	}
	int query(int l, int r, int tarl = 1, int tarr = 1000000000, int node = 0){
		dallan(node, tarl, tarr);
		if (tarl>=l && tarr<=r) return segtree[node].val;
		if (tarl>r || tarr<l) return 0ll;
		int rval = 0;
		int mid = tarl+(tarr-tarl)/2;
		if (segtree[node].lnode!=-1){
			rval+=query(l, r, tarl, mid, segtree[node].lnode);
		}
		if (segtree[node].rnode!=-1){
			rval+=query(l, r, mid+1, tarr, segtree[node].rnode);
		}
		return rval;
	}
	void update(int l, int r, int tarl = 1, int tarr = 1000000000, int node = 0) {
		dallan(node, tarl, tarr);
		if (tarl>=l && tarr<=r){
			segtree[node].lazy=1;
			dallan(node, tarl, tarr);
			return;
		}
		if (tarl>r || tarr<l) return;
		int mid = tarl+(tarr-tarl)/2;
		if (mid>=l){
			lyap(node, tarl, tarr);
			update(l, r, tarl, mid, segtree[node].lnode);
		}
		if (mid+1<=r){
			ryap(node, tarl, tarr);
			update(l, r, mid+1, tarr, segtree[node].rnode);
		}
		segtree[node].val=0ll;
		if (segtree[node].lnode!=-1){
			dallan(segtree[node].lnode, tarl, mid);
			segtree[node].val+=segtree[segtree[node].lnode].val;
		}
		if (segtree[node].rnode!=-1){
			dallan(segtree[node].rnode, mid+1, tarr);
			segtree[node].val+=segtree[segtree[node].rnode].val;
		}
	}
};
int32_t main(){
	ios;
	int t=1;
	int tno = 0;
	if (!t) cin>>t;
	while (t-(tno++)){
		SegTree segtree;
		deci(q);
		int c = 0;
		while (q--){
			deci(d);
			deci(l);deci(r);
			l+=c;
			r+=c;
			if (d==1){
				c=segtree.query(l,r);
				cout<<c<<endl;
			}
			else {
				segtree.update(l,r);
			}
		}
	}
}

Compilation message

apple.cpp:1: warning: ignoring '#pragma optimize ' [-Wunknown-pragmas]
    1 | #pragma optimize("Bismillahirrahmanirrahim")
      | 
apple.cpp: In constructor 'SegTree::Node::Node()':
apple.cpp:31:19: warning: 'SegTree::Node::rnode' will be initialized after [-Wreorder]
   31 |   int val, lnode, rnode, lazy;
      |                   ^~~~~
apple.cpp:31:7: warning:   'int SegTree::Node::val' [-Wreorder]
   31 |   int val, lnode, rnode, lazy;
      |       ^~~
apple.cpp:32:3: warning:   when initialized here [-Wreorder]
   32 |   Node():lnode(-1),rnode(-1),val(0),lazy(0){}
      |   ^~~~
apple.cpp: In member function 'void SegTree::lyap(int, int, int)':
apple.cpp:41:7: warning: unused variable 'mid' [-Wunused-variable]
   41 |   int mid = tarl+(tarr-tarl)/2;
      |       ^~~
apple.cpp: In member function 'void SegTree::ryap(int, int, int)':
apple.cpp:48:7: warning: unused variable 'mid' [-Wunused-variable]
   48 |   int mid = tarl+(tarr-tarl)/2;
      |       ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 13 ms 4588 KB Output is correct
5 Correct 15 ms 4556 KB Output is correct
6 Correct 15 ms 4512 KB Output is correct
7 Correct 17 ms 4596 KB Output is correct
8 Correct 114 ms 33348 KB Output is correct
9 Correct 245 ms 66332 KB Output is correct
10 Correct 241 ms 66308 KB Output is correct
11 Correct 253 ms 66244 KB Output is correct
12 Correct 255 ms 66260 KB Output is correct
13 Correct 262 ms 132176 KB Output is correct
14 Correct 269 ms 132208 KB Output is correct
15 Runtime error 420 ms 262144 KB Execution killed with signal 9
16 Halted 0 ms 0 KB -