# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1254499 | yeongminb | Happiness (Balkan15_HAPPINESS) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#define f first
#define s second
#define fastio cin.tie(0)->ios::sync_with_stdio(0);
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const ll INF = 1e18;
struct Node{
ll num = 0, lazy = 0;
Node *left = nullptr, *right = nullptr;
};
struct SegmentTree{
public:
ll n;
Node *root = new Node;
SegmentTree(ll N){n = N;};
void update(ll l, ll r, ll val){
update(root, 0, n-1, l, r, val);
}
ll query(ll l, ll r){
return query(root, 0, n-1, l, r);
}
private:
void propagate(Node *cur, ll st, ll en){
if(cur->left == nullptr) cur->left = new Node;
if(cur->right == nullptr) cur->right = new Node;
ll mid = (st + en)/2;
if(cur->lazy){
cur->left->lazy += cur->lazy;
cur->right->lazy += cur->lazy;
cur->left->num += (cur->lazy);
cur->right->num += (cur->lazy);
}
}
void update(Node *cur, ll st, ll en, ll l, ll r, ll val){
if(l > en || r < st) return;
if(l <= st && en <= r){
cur->lazy += val;
cur->num += val;
return;
}
propagate(cur, st, en);
ll mid = (st + en)/2;
update(cur->left, st, mid, l, r, val);
update(cur->right, mid+1, en, l, r, val);
cur->num = max((cur->left->num), (cur->right->num));
}
ll query(Node *cur, ll st, ll en, ll l, ll r){
if(l > en || r < st) return 0;
if(l <= st && en <= r) return cur->num;
propagate(cur, st, en);
ll mid = (st + en)/2;
return max(query(cur->left, st, mid, l, r), query(cur->right, mid+1, en, l, r));
}
};
int main(){
fastio;
ll N,M; cin >> N >> M;
vector<ll> v(N), freq(M + 10, 0);
for(auto &x : v) cin >> x;
SegmentTree seg(M + 10);
for(auto x : v){
seg.update(x+1, M+5, -x);
if(freq[x] == 0)
seg.update(x,x,x);
freq[x] ++;
}
if(seg.query(0, M+5) > 1) cout << "0\n";
else cout << "1\n";
ll Q; cin >> Q;
while(Q--){
ll i,K; cin >> i >> K;
if(i == -1){
while(K--){
ll x; cin >> x;
freq[x] --;
seg.update(x+1, M+5, x);
if(freq[x] == 0) seg.update(x,x,-x);
}
} else {
while(K--){
ll x; cin >> x;
if(freq[x] == 0) seg.update(x,x,x);
freq[x] ++;
seg.update(x+1, M+5, -x);
}
}
if(seg.query(0, M+5) > 1) cout << "0\n";
else cout << "1\n";
}
}