#include <bits/stdc++.h>
#include "wall.h"
using namespace std;
#define ull unsigned long long
#define ll long long
#define ld long double
#define pb push_back
#define f first
#define s second
#define sz(x) (int)x.size()
#define all(x) x.begin(),x.end()
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pld pair<ld,ld>
#define pdd pair<double,double>
#define mp make_pair
#define AmirMakaM ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
//#define int long long
// solve it
const ull SEED = chrono::steady_clock::now().time_since_epoch().count();
mt19937_64 mrand(SEED);
ull rnd(ull x = ~(0ull)) {return mrand() % x;}
const ll MOD = 998244353;
const ll INF = 1e16+20;
const int inf = 1e9 + 7;
const ll N = 2e6+1;
const ll M = 2e3+1;
const double pi = 2*acos(0.0);
const int dx[] = {1,-1,0,0}, dy[] = {0,0,1,-1};
int t[4*N], keep[4*N], n;
void push(int v) {
if(keep[v] == inf) return;
if(keep[v] > 0) {
t[v+v] = max(t[v+v],keep[v]);
t[v+v+1] = max(t[v+v+1],keep[v]);
keep[v+v] = keep[v];
keep[v+v+1] = keep[v];
} else if(keep[v] < 0) {
t[v+v] = min(t[v+v],-keep[v]);
t[v+v+1] = min(t[v+v+1],-keep[v]);
keep[v+v] = keep[v];
keep[v+v+1] = keep[v];
} else if(keep[v] == 0) {
t[v+v] = t[v+v+1] = keep[v+v] = keep[v+v+1] = 0;
}
keep[v] = inf;
}
void upd1(int v, int tl, int tr, int l, int r, int x) {
if(r < tl || tr < l) {
return;
} else if(l <= tl && tr <= r) {
t[v] = max(t[v],x);
keep[v] = x;
return;
}
int tm = (tl+tr)>>1;
push(v);
upd1(v+v,tl,tm,l,r,x);
upd1(v+v+1,tm+1,tr,l,r,x);
t[v] = max(t[v+v],t[v+v+1]);
}
void upd2(int v, int tl, int tr, int l, int r, int x) {
if(r < tl || tr < l) {
return;
} else if(l <= tl && tr <= r) {
t[v] = min(t[v],-x);
keep[v] = x;
return;
}
int tm = (tl+tr)>>1;
push(v);
upd2(v+v,tl,tm,l,r,x);
upd2(v+v+1,tm+1,tr,l,r,x);
t[v] = max(t[v+v],t[v+v+1]);
}
int get(int v, int tl, int tr, int pos) {
if(tl == tr) {
return t[v];
}
int tm = (tl+tr)>>1;
push(v);
if(pos <= tm) return get(v+v,tl,tm,pos);
else return get(v+v+1,tm+1,tr,pos);
}
void buildWall(int N, int k, int type[], int l[], int r[],int h[], int ans[]) {
n = N;
for(int i=1; i<=4*n; i++) {
t[i] = 0, keep[i] = inf;
}
for(int i=0; i<k; i++) {
if(type[i] == 1) {
if(h[i] != 0) upd1(1,1,n,l[i]+1,r[i]+1,h[i]);
} else {
upd2(1,1,n,l[i]+1,r[i]+1,-h[i]);
}
}
for(int i=1; i<=n; i++) {
ans[i-1] = get(1,1,n,i);
}
}
/*
int main() {
AmirMakaM;
srand(SEED);
//freopen("bulk.in", "r", stdin);
//freopen("bulk.out", "w", stdout);
int ttt = 1;
cin >> ttt;
while(ttt--) {
solve();
}
return 0;
int N, k;
cin >> N >> k;
int type[k], l[k], r[k], h[k], ans[N];
for(int i=0; i<k; i++) cin >> type[i] >> l[i] >> r[i] >> h[i];
buildWall(N,k,type,l,r,h,ans);
}
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |