답안 #539364

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
539364 2022-03-18T18:52:54 Z 1ne Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++14
0 / 100
486 ms 262144 KB
#include<bits/stdc++.h>
using namespace std;
vector<int64_t>extra;
vector<vector<int64_t>>tree;
vector<int64_t>arr;
void build(int64_t node,int64_t node_low,int64_t node_high){
    if (node_low==node_high){
        tree[node].push_back(arr[node_low]);
    }
    else {
    	int y = (node_low + node_high) >> 1;
    	int z = node + ((y - node_low + 1) << 1);
        build(node+1,node_low,y);
        build(z,y+1,node_high);
        extra[node] = max(extra[node+1],extra[z]);
	    auto right = lower_bound(tree[z].begin(),tree[z].end(),tree[node+1].back()) - tree[z].begin();
		while(right>=0){
			if (tree[z][right]>=tree[node+1].back() || right>=(int)tree[z].size()){
				--right;
			}
			else break;
		}
		if (right>=0){
			extra[node] = max(extra[node],tree[node+1].back() + tree[z][right]);
		}
        merge(tree[node+1].begin(),tree[node+1].end(),tree[z].begin(),tree[z].end(),back_inserter(tree[node]));    
    }  
}
int64_t curans = 0;
int64_t maxxy = 0;
void query(int64_t node,int64_t node_low,int64_t node_high,int64_t query_low,int64_t query_high){
    if (node_low>node_high||query_high<node_low||query_low>node_high)return ;
    if (query_low<=node_low&&query_high>=node_high){
    	curans = max(curans,extra[node]);
    	auto right = lower_bound(tree[node].begin(),tree[node].end(),maxxy) - tree[node].begin();
		while(right>=0){
			if (tree[node][right]>=maxxy || right>=(int)tree[node].size()){
				--right;
			}
			else break;
		}
		if (right>=0){
			curans = max(curans,maxxy + tree[node][right]);
		}
	    maxxy = max(maxxy,tree[node].back());
	    return ;
    }
    int y = (node_low + node_high) >> 1;
    int z = node + ((y - node_low + 1) << 1);
   	query(node+1,node_low,y,query_low,query_high);
   	query(z,y+1,node_high,query_low,query_high);
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int64_t n,m;cin>>n>>m;
arr.resize(n);
for (int64_t i = 0;i<n;++i){
	cin>>arr[i];
}
extra.resize(2 * n - 1,0);
tree.resize(2 * n - 1);
build(0,0,n-1);
for (int64_t i = 0;i<m;++i){
	int64_t l,r,k;cin>>l>>r>>k;
	--l,--r;
	curans = 0;
	maxxy = 0;
	//query(0,0,n-1,l,r);
	//cout<<curans<<" "<<maxxy<<'\n';
	if (curans>k){
		cout<<0<<'\n';
	}
	else cout<<1<<'\n';
}
return 0;}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 486 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 84 ms 29844 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -