답안 #497579

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
497579 2021-12-23T10:08:34 Z vinnipuh01 Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++17
64 / 100
506 ms 262148 KB
#include <iostream>
#include <bits/stdc++.h>
#include <cmath>
#include <algorithm>
#include <vector>
#include <deque>
#include <set>
#include <stack>
#include <string>
#include <map>
#include <queue>
 
using namespace std;
 
const long long oo = 1000000000000000000;
 
long long sum, ans = 0, mx = 0, mn = 1000000000, num, pos;
 
 
/*
    ViHHiPuh
 
   (( `'-""``""-'` ))
     )-__-_.._-__-(
   / --- (o _ o) --- \
   \ .-* ( .0. ) *-. /
   _'-. ,_ '=' _, .-'_
  / `;#'#'# - #'#'#;` \
 \_)) -----'#'----- ((_/
      # --------- #
  '# ------- ------ #'
  /..-'# ------- #'-.\
  _\...-\'# -- #'/-.../_
  ((____)- '#' -(____))
 
 
    cout << fixed << setprecision(6) << x;
 
 
    freopen ( "sum.in", "r", stdin )
*/
 
struct Node {
	vector <int> v;
	int ans;
	public :
		Node operator + ( Node a ) {
			Node c;
			c.ans = max( ans, a.ans );
			int l, r;
			l = r = 0;
			int mx = v.back();
			int mxx = -1;
			while ( l < v.size() && r < a.v.size() ) {
				if ( v[ l ] < a.v[ r ] ) {
					c.v.push_back( v[ l ] );
					l ++;
				}
				else {
					c.v.push_back( a.v[ r ] );
					if ( a.v[ r ] > mxx && a.v[ r ] < mx )
						mxx = a.v[ r ];
					r ++;
				}
			}
			while ( l < v.size() ) {
				c.v.push_back( v[ l ] );
				l ++;
			}
			while ( r < a.v.size() ) {
				c.v.push_back( a.v[ r ] );
				if ( a.v[ r ] > mxx && a.v[ r ] < mx )
					mxx = a.v[ r ];
				r ++;
			}
			if ( ~mxx )
				c.ans = max( c.ans, mx + mxx );
			return c;
		}
} t[ 4000001 ];
 
struct Node1 {
	int ans, mx;
} an;
 
int n, m, a[ 1000001 ];
 
void build( int v, int tl, int tr ) {
	if ( tl == tr ) {
		t[ v ].v.push_back( a[ tl ] );
		t[ v ].ans = 0;
		return;
	}
	int mid = ( tl + tr ) / 2;
	build( v + v, tl, mid );
	build( v + v + 1, mid + 1, tr );
	t[ v ] = t[ v + v ] + t[ v + v + 1 ];
}
 
void gett( int v, int tl, int tr, int l, int r ) {
	if ( tl > r || tr < l )
		return;
	if ( tl >= l && tr <= r ) {
		an.ans = max( an.ans, t[ v ].ans );
		if ( an.mx > t[ v ].v.front() ) {
			auto it = lower_bound( t[ v ].v.begin(), t[ v ].v.end(), an.mx );
			it = --it;
			an.ans = max( an.ans, an.mx + *it );
		}
		an.mx = max( an.mx, t[ v ].v.back() );
		return;
	}
	int mid = ( tl + tr ) / 2;
	gett( v + v, tl, mid, l, r );
	gett( v + v + 1, mid + 1, tr, l, r );
}

struct Node2 {
	int mn, mx, inv;
	public :
		Node2 operator + ( Node2 a ) {
			Node2 c;
			c.inv = max( inv, a.inv );
			if ( a.mn < mx )
				c.inv = 1;
			c.mn = min( mn, a.mn );
			c.mx = max( mx, a.mx );
			return c;
		}
} t1[ 3000001 ];
 
void build1( int v, int tl, int tr ) {
	if ( tl == tr ) {
		t1[ v ].mn = a[ tl ];
		t1[ v ].mx = a[ tl ];
		t1[ v ].inv = 0;
		return;
	}
	int mid = ( tl + tr ) / 2;
	build1( v + v, tl, mid );
	build1( v + v + 1, mid + 1, tr );
	t1[ v ] = t1[ v + v ] + t1[ v + v + 1 ];
}
 
void gett1( int v, int tl, int tr, int l, int r ) {
	if ( tl > r || tr < l )
		return;
	if ( tl >= l && tr <= r ) {
		if ( t1[ v ].mn < mx || t1[ v ].inv )
			num = 1;
		mx = max( mx, t1[ v ].mx + 0ll );
		return;
	}
	int mid = ( tl + tr ) / 2;
	gett1( v + v, tl, mid, l, r );
	gett1( v + v + 1, mid + 1, tr, l, r );
}

main () {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
	cin >> n >> m;
	for ( int i = 1; i <= n; i ++ ) {
		cin >> a[ i ];
	}
	int l, r, x;
//	if ( n <= 2e5 && m <= 2e5 )
		build( 1, 1, n );
//	else
//		build1( 1, 1, n );
	while ( m -- ) {
		cin >> l >> r >> x;
//		if ( n <= 2e5 && m <= 2e5 ) {
			num = 0;
			an.mx = 0;
			an.ans = 0;
			gett( 1, 1, n, l, r );
			cout << ( x >= an.ans ) << "\n";
//		}
//		else {
//			num = 0;
//			mx = -1;
//			gett1( 1, 1, n, l, r );
//			cout << !num << "\n";
//		}
	}
}
 
/*
9 1
10 6 7 10 1 3 7 3 7 
2 3 1
 
3 1 
7 1 9
1 3 8
 
*/

Compilation message

sortbooks.cpp: In member function 'Node Node::operator+(Node)':
sortbooks.cpp:54:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |    while ( l < v.size() && r < a.v.size() ) {
      |            ~~^~~~~~~~~~
sortbooks.cpp:54:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |    while ( l < v.size() && r < a.v.size() ) {
      |                            ~~^~~~~~~~~~~~
sortbooks.cpp:66:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |    while ( l < v.size() ) {
      |            ~~^~~~~~~~~~
sortbooks.cpp:70:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |    while ( r < a.v.size() ) {
      |            ~~^~~~~~~~~~~~
sortbooks.cpp: At global scope:
sortbooks.cpp:159:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  159 | main () {
      | ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 63 ms 125508 KB Output is correct
2 Correct 60 ms 125464 KB Output is correct
3 Correct 59 ms 125472 KB Output is correct
4 Correct 60 ms 125556 KB Output is correct
5 Correct 61 ms 125576 KB Output is correct
6 Correct 64 ms 125532 KB Output is correct
7 Correct 62 ms 125644 KB Output is correct
8 Correct 61 ms 125564 KB Output is correct
9 Correct 63 ms 125456 KB Output is correct
10 Correct 62 ms 125608 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 63 ms 125508 KB Output is correct
2 Correct 60 ms 125464 KB Output is correct
3 Correct 59 ms 125472 KB Output is correct
4 Correct 60 ms 125556 KB Output is correct
5 Correct 61 ms 125576 KB Output is correct
6 Correct 64 ms 125532 KB Output is correct
7 Correct 62 ms 125644 KB Output is correct
8 Correct 61 ms 125564 KB Output is correct
9 Correct 63 ms 125456 KB Output is correct
10 Correct 62 ms 125608 KB Output is correct
11 Correct 63 ms 125760 KB Output is correct
12 Correct 66 ms 126244 KB Output is correct
13 Correct 65 ms 126192 KB Output is correct
14 Correct 79 ms 126168 KB Output is correct
15 Correct 67 ms 126200 KB Output is correct
16 Correct 77 ms 126140 KB Output is correct
17 Correct 64 ms 126148 KB Output is correct
18 Correct 64 ms 126264 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 506 ms 262148 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 240 ms 139660 KB Output is correct
2 Correct 215 ms 139388 KB Output is correct
3 Correct 189 ms 139444 KB Output is correct
4 Correct 191 ms 139488 KB Output is correct
5 Correct 187 ms 139420 KB Output is correct
6 Correct 158 ms 139432 KB Output is correct
7 Correct 169 ms 139480 KB Output is correct
8 Correct 180 ms 139404 KB Output is correct
9 Correct 93 ms 125700 KB Output is correct
10 Correct 176 ms 139396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 63 ms 125508 KB Output is correct
2 Correct 60 ms 125464 KB Output is correct
3 Correct 59 ms 125472 KB Output is correct
4 Correct 60 ms 125556 KB Output is correct
5 Correct 61 ms 125576 KB Output is correct
6 Correct 64 ms 125532 KB Output is correct
7 Correct 62 ms 125644 KB Output is correct
8 Correct 61 ms 125564 KB Output is correct
9 Correct 63 ms 125456 KB Output is correct
10 Correct 62 ms 125608 KB Output is correct
11 Correct 63 ms 125760 KB Output is correct
12 Correct 66 ms 126244 KB Output is correct
13 Correct 65 ms 126192 KB Output is correct
14 Correct 79 ms 126168 KB Output is correct
15 Correct 67 ms 126200 KB Output is correct
16 Correct 77 ms 126140 KB Output is correct
17 Correct 64 ms 126148 KB Output is correct
18 Correct 64 ms 126264 KB Output is correct
19 Correct 499 ms 154500 KB Output is correct
20 Correct 506 ms 154556 KB Output is correct
21 Correct 426 ms 154448 KB Output is correct
22 Correct 430 ms 154516 KB Output is correct
23 Correct 409 ms 154404 KB Output is correct
24 Correct 311 ms 154688 KB Output is correct
25 Correct 296 ms 154440 KB Output is correct
26 Correct 372 ms 154420 KB Output is correct
27 Correct 352 ms 154496 KB Output is correct
28 Correct 385 ms 154420 KB Output is correct
29 Correct 394 ms 154416 KB Output is correct
30 Correct 390 ms 154576 KB Output is correct
31 Correct 371 ms 154488 KB Output is correct
32 Correct 398 ms 154528 KB Output is correct
33 Correct 370 ms 154556 KB Output is correct
34 Correct 298 ms 154456 KB Output is correct
35 Correct 280 ms 154524 KB Output is correct
36 Correct 354 ms 154444 KB Output is correct
37 Correct 281 ms 154408 KB Output is correct
38 Correct 313 ms 154464 KB Output is correct
39 Correct 359 ms 154512 KB Output is correct
40 Correct 259 ms 142136 KB Output is correct
41 Correct 429 ms 154604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 63 ms 125508 KB Output is correct
2 Correct 60 ms 125464 KB Output is correct
3 Correct 59 ms 125472 KB Output is correct
4 Correct 60 ms 125556 KB Output is correct
5 Correct 61 ms 125576 KB Output is correct
6 Correct 64 ms 125532 KB Output is correct
7 Correct 62 ms 125644 KB Output is correct
8 Correct 61 ms 125564 KB Output is correct
9 Correct 63 ms 125456 KB Output is correct
10 Correct 62 ms 125608 KB Output is correct
11 Correct 63 ms 125760 KB Output is correct
12 Correct 66 ms 126244 KB Output is correct
13 Correct 65 ms 126192 KB Output is correct
14 Correct 79 ms 126168 KB Output is correct
15 Correct 67 ms 126200 KB Output is correct
16 Correct 77 ms 126140 KB Output is correct
17 Correct 64 ms 126148 KB Output is correct
18 Correct 64 ms 126264 KB Output is correct
19 Runtime error 506 ms 262148 KB Execution killed with signal 9
20 Halted 0 ms 0 KB -