답안 #671653

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
671653 2022-12-13T12:18:08 Z tolbi 원숭이와 사과 나무 (IZhO12_apple) C++17
0 / 100
455 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 int long long
#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, l, r, lazy;
		Node():lnode(-1),rnode(-1),val(0),lazy(0){}
	};
	vector<Node> segtree;
	SegTree(){
		segtree.push_back(Node());
		segtree[0].l=1;
		segtree[0].r=1000000000;
		segtree[0].val=0;
		segtree[0].lazy=0;
	}
	void lyap(int node){
		int mid = segtree[node].l+(segtree[node].r-segtree[node].l)/2;
		if (segtree[node].lnode==-1){
			segtree[node].lnode=segtree.size();
			segtree.push_back(Node());
			segtree[segtree[node].lnode].l=segtree[node].l;
			segtree[segtree[node].lnode].r=mid;
		}
	}
	void ryap(int node){
		int mid = segtree[node].l+(segtree[node].r-segtree[node].l)/2;
		if (segtree[node].rnode==-1){
			segtree[node].rnode=segtree.size();
			segtree.push_back(Node());
			segtree[segtree[node].rnode].l=mid+1;
			segtree[segtree[node].rnode].r=segtree[node].r;
		}
	}
	void dallan(int node){
		if (segtree[node].lazy==1){
			lyap(node);
			ryap(node);
			segtree[segtree[node].lnode].lazy=1;
			segtree[segtree[node].rnode].lazy=1;
			segtree[node].val=segtree[node].r-segtree[node].l+1;
		}
		segtree[node].lazy=0;
	}
	int query(int l, int r, int node = 0){
		dallan(node);
		if (segtree[node].l>=l && segtree[node].r<=r) return segtree[node].val;
		if (segtree[node].l>r || segtree[node].r<l) return 0ll;
		int rval = 0;
		if (segtree[node].lnode!=-1){
			rval+=query(l, r, segtree[node].lnode);
		}
		if (segtree[node].rnode!=-1){
			rval+=query(l, r, segtree[node].rnode);
		}
		return rval;
	}
	void update(int l, int r, int node = 0) {
		dallan(node);
		if (segtree[node].l>=l && segtree[node].r<=r){
			segtree[node].lazy=1;
			dallan(node);
			return;
		}
		if (segtree[node].l>r || segtree[node].r<l) return;
		int mid = segtree[node].l+(segtree[node].r-segtree[node].l)/2;
		segtree[node].val=0ll;
		lyap(node);
		update(l, r, segtree[node].lnode);
		segtree[node].val+=segtree[segtree[node].lnode].val;

		ryap(node);
		update(l, r, segtree[node].rnode);
		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:32:19: warning: 'SegTree::Node::rnode' will be initialized after [-Wreorder]
   32 |   int val, lnode, rnode, l, r, lazy;
      |                   ^~~~~
apple.cpp:32:7: warning:   'long long int SegTree::Node::val' [-Wreorder]
   32 |   int val, lnode, rnode, l, r, lazy;
      |       ^~~
apple.cpp:33:3: warning:   when initialized here [-Wreorder]
   33 |   Node():lnode(-1),rnode(-1),val(0),lazy(0){}
      |   ^~~~
apple.cpp: In member function 'void SegTree::update(long long int, long long int, long long int)':
apple.cpp:92:7: warning: unused variable 'mid' [-Wunused-variable]
   92 |   int mid = segtree[node].l+(segtree[node].r-segtree[node].l)/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 340 KB Output is correct
4 Correct 24 ms 12800 KB Output is correct
5 Correct 26 ms 12736 KB Output is correct
6 Correct 26 ms 12788 KB Output is correct
7 Correct 27 ms 12768 KB Output is correct
8 Correct 224 ms 98936 KB Output is correct
9 Correct 421 ms 197556 KB Output is correct
10 Correct 455 ms 197584 KB Output is correct
11 Correct 434 ms 197672 KB Output is correct
12 Correct 455 ms 197680 KB Output is correct
13 Runtime error 420 ms 262144 KB Execution killed with signal 9
14 Halted 0 ms 0 KB -