Submission #384161

#TimeUsernameProblemLanguageResultExecution timeMemory
384161patrikpavic2Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
2926 ms114852 KiB
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <stack>

#define PB push_back

using namespace std;

const int N = 1e6 + 500;
const int OFF = (1 << 20);

int T[2 * OFF], prop[2 * OFF];
int n, q, qL[N], qR[N], qK[N], qA[N], A[N];
vector < int > v[N];

void refresh(int x){
	if(!prop[x]) return;
	T[x] += prop[x];
	if(x < OFF){
		prop[2 * x] += prop[x];
		prop[2 * x + 1] += prop[x];
	}
	prop[x] = 0;
}

void update(int i, int a, int b, int lo, int hi,int x){
	refresh(i);
	if(lo <= a && b <= hi){
		prop[i] += x; refresh(i);
		return;
	}
	if(a > hi || b < lo) return;
	update(2 * i, a, (a + b) / 2, lo, hi, x);
	update(2 * i + 1, (a + b) / 2 + 1, b, lo, hi, x);
	T[i] = max(T[2 * i], T[2 * i + 1]);
}

int query(int i, int a, int b, int lo, int hi){
	refresh(i);
	if(lo <= a && b <= hi) return T[i];
	if(a > hi || b < lo) return 0;
	return max(query(2 * i, a, (a + b) / 2, lo, hi), query(2 * i + 1, (a + b) / 2 + 1, b, lo, hi));
}

int main(){
	scanf("%d%d", &n, &q);
	for(int i = 0;i < n;i++)
		scanf("%d", A + i);
	for(int i = 0;i < q;i++){
		scanf("%d%d%d", qL + i, qR + i, qK + i);
		qL[i]--, qR[i]--; v[qL[i]].PB(i);
	}
	stack < int > S;
	for(int i = n - 1;i >= 0;i--){
		while(!S.empty () && A[i] > A[S.top()]){
			int vrh = S.top(); S.pop();
			update(1, 0, OFF - 1, vrh + 1, (S.empty() ? n : S.top()) - 1, A[i] - A[vrh]);
			update(1, 0, OFF - 1, vrh, vrh, A[i] + A[vrh]);
		}
		S.push(i);
		for(int x : v[i]){
			qA[x] = query(1, 0, OFF - 1, qL[x], qR[x]);
		}
	}
	for(int i = 0;i < q;i++)
		printf("%d\n", qA[i] <= qK[i]);
}


Compilation message (stderr)

sortbooks.cpp: In function 'int main()':
sortbooks.cpp:48:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   48 |  scanf("%d%d", &n, &q);
      |  ~~~~~^~~~~~~~~~~~~~~~
sortbooks.cpp:50:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   50 |   scanf("%d", A + i);
      |   ~~~~~^~~~~~~~~~~~~
sortbooks.cpp:52:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   52 |   scanf("%d%d%d", qL + i, qR + i, qK + i);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...