Submission #1267639

#TimeUsernameProblemLanguageResultExecution timeMemory
1267639namhhFish 3 (JOI24_fish3)C++20
100 / 100
506 ms41748 KiB
//d bt code sai cho nao nen phai chef code:<
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
const int N = 3e5+5;
int n,q,c[N],d,st[4*N],lazy[4*N],ans[N],pre[N];
vector<pii> rem[N];
struct doan{
	int l,r,vl,vr;
};
vector<doan> emilia;
inline int ceil_div(int x,int y){
    return x / y + !!(x % y);
}
void down(int id, int l, int mid, int r){
	if(lazy[id] != 0){
		st[2*id] += lazy[id] * (mid - l + 1);
		st[2*id+1] += lazy[id] * (r - mid);
		lazy[2*id] += lazy[id];
		lazy[2*id+1] += lazy[id];
		lazy[id] = 0;
	}
}
void update(int id, int l, int r, int u, int v, int val){
	if(l > v || r < u) return;
	if(l >= u && r <= v){
		st[id] += val * (r - l + 1);
		lazy[id] += val;
		return;
	}
	int mid = (l + r) / 2;
	if(l != r) down(id, l, mid, r);
	update(2*id, l, mid, u, v, val);
	update(2*id+1, mid+1, r, u, v, val);
	st[id] = st[2*id] + st[2*id+1];
}
int get(int id, int l, int r, int u, int v){
	if(l > v || r < u) return 0;
	if(l >= u && r <= v) return st[id];
	int mid = (l + r) / 2;
	if(l != r) down(id, l, mid, r);
	return get(2*id, l, mid, u, v) + get(2*id+1, mid+1, r, u, v);
}
inline int valAt(int p){
    return c[p] - get(1,1,n,p,p) * d;
}
signed main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> n >> d;
	for(int i = 1; i <= n; i++){
		cin >> c[i];
	}
	cin >> q;
	for(int i = 1; i <= q; i++){
		int l,r;
		cin >> l >> r;
		rem[r].push_back({l,i});
	}
	stack<int> s;
	for(int i = 1; i <= n; i++){
		int r = i;
		while(!s.empty()){
			int l = s.top();
			int x = valAt(r-1);
			int y = valAt(r);
			if(x <= y) break;
			int need = ceil_div((int)(x - y), (int)d);
			update(1,1,n,l,r-1,need);
			r = l;
			s.pop();
		}
		s.push(r);
		for(auto pr : rem[i]){
			int L = pr.fi, idq = pr.se;
			if(valAt(L) < 0) ans[idq] = -1;
			else ans[idq] = get(1,1,n,L,i);
		}
	}
	for(int i = 1; i <= q; i++) cout << ans[i] << "\n";
}
//-----+--+----+-==-=*==--=+----------==----------------+=-----==-=+-==----------------
//---===+=----+=----=*=+=*+----------==-----------+=-----==-----==--+-+----------------
//---+=**=-=+---------***+----=------=-------------=-------+-----==-+--=---------------
//----*+-+++**++------=#+----===-----=-------------=-------==-----+-=+=-+--------------
//----++#***+*+++-----=+-----=-=----+---------------+-------+=-----*=-==-+-------------
//---+=+**++**++++==++*=-----===----+---------------+----=---=-----=*+*=-==------------
//---++**==+--++++++***-----+-+-----+---------------==---==--==-----+**---+------------
//----++*#=-+++***+***------+-+-----+----------------=----+---*+=---=*#=-=-+-----------
//-----=**+++*+++**%++-----=--+-----+----------------=----*=--==+==++***-=+==----------
//-------**#**++*%%@==-----=--+-----+-------------=+++++=-+=---+=+=-=+**--+++----------
//---------====+@@%@-=-----+--+--=+++++--------------=----+==--===---+*---+==+---------
//-----------=@*%%%%-=-----+=-==-----=---------------=----+--=-==+-=-=*----++==--------
//----------%#=%=#%%==-----=+--=-----=---------------+----+--===*=*==**=---+-++--------
//--------+@++@=*@%*-=-----=+=-=-----==-------------++-*%%%***=++-+=-+-+---=-===-------
//-------#%-=%=+@%@+-=-----=+=--+++*==*=------------**@*##%*--=-+-----=+---==-+==------
//------=%+-=%=%*@@--=-----=*#*=+*###@%*---------=+*++%***##=-+-+------+---==-=+=------
//-------%*-=%@+@@+-*=-----+-=--@##*##=+==----------=-#*#***-==-+------+---==--++------
//-------+@=+@@*@*-=-=-----=-==-*#%*##=----------------++=+=----+------+---==--==+-----
//--------%@@%%@*=--+=-----=---+=+#==*-------------------==-----+------+---==---=+-----
//----------%+=#-=--==-----+-------===--------------------------*------+---==---+==----
//---------##-%+-=---=-----++----------------------------------=*------=---==---=+=----
//--------=#-*@=-=---=-----**=----------------=----------------+*------=---==----++----
//-------=@==%*-==---=-----++*---------------------------------*+------+---==----++=---
//------=%*-=@--==---=-----+++*-------------------------------**=------+---==----==+---
//------*#--##--==---=-----+++*+--------------------+--------+**=------+---=-----==+---
//-----=@=--@*---=---=-----+++#+*=--------=+=----=+=-------=#+**-------+---+-----==+---
//----=%+--=@+---=---=-----=+**++**=---------------------=*+****------==---+-----===---
//----*#---*@=---=--==-----=*+#++*+++*=---------------=*#*++#+*+==----+==-+=-----====--
//---=@=---%%----=--=+-----=*+#++*++++***+----------*****+++#**++-----+==-+-------===--
//---%#----%%---==--=+------*+*++*++**+***+**++=+****+==++*+**#-+-----+==-+-------+==--
//--=@=---=%#---==--+*------*++*+*++#+*****++++****+--==*=*****==----===-==-------+==--
//--##----=@*---+=--+*------=++*+*++*++++++*******=-------+***==-----===-==-------+==--
//-=@+----+@=---+=--+#=-----=*+*+*++#++*+++**#*++-+-------+***-+-----+===+--------*==--
//-*@=----*@=---=---+*+------++*+*+*-=++*+***=-+--+--------#**-=-----*====--------*==--
//=%%-----#@---==---=**------++****---------*=----+--------=#=+-----=*==*---------*==--
//=@*-----%@---==---=*#------++*+------=+%@##@+==%%+*+==----+==-----+*+-++++=+++*++==--
#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...