This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int MAXN = 1e6;
const ll INF = 1e15;
int Q;
multiset<ll, greater<ll>> L[MAXN+10], LL;
multiset<ll> R[MAXN+10], RR;
struct Node
{
ll maxl, minr, val;
Node() : maxl(-INF), minr(INF), val(INF) {}
};
Node operator + (const Node &p, const Node &q)
{
Node ret;
ret.maxl=max(p.maxl, q.maxl);
ret.minr=min(p.minr, q.minr);
ret.val=min({p.val, q.val, q.minr-p.maxl});
return ret;
}
Node tree[MAXN*4+10];
void update(int node, int tl, int tr, int pos)
{
if(tl==tr)
{
tree[node].maxl=*L[tl].begin();
tree[node].minr=*R[tl].begin();
tree[node].val=INF;
return;
}
int mid=tl+tr>>1;
if(pos<=mid) update(node*2, tl, mid, pos);
else update(node*2+1, mid+1, tr, pos);
tree[node]=tree[node*2]+tree[node*2+1];
//printf("%d %d : %lld %lld %lld\n", tl, tr, tree[node].maxl, tree[node].minr, tree[node].val);
}
int main()
{
scanf("%d", &Q);
for(int i=1; i<=MAXN; i++)
{
L[i].insert(-INF);
R[i].insert(INF);
}
for(int i=1; i<=Q; i++)
{
int l, r;
char c;
scanf(" %c%d%d", &c, &l, &r);
if(c=='A')
{
L[r-1].insert(l);
R[l].insert(r);
LL.insert(l);
RR.insert(r);
}
else
{
L[r-1].erase(L[r-1].find(l));
R[l].erase(R[l].find(r));
LL.erase(LL.find(l));
RR.erase(RR.find(r));
}
update(1, 1, MAXN, l);
update(1, 1, MAXN, r-1);
if(*LL.begin()<=*RR.begin()) printf("%lld\n", *R[*LL.begin()].begin()-*L[*RR.begin()-1].begin());
else printf("%lld\n", tree[1].val);
}
}
Compilation message (stderr)
Main.cpp: In function 'void update(int, int, int, int)':
Main.cpp:42:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
42 | int mid=tl+tr>>1;
| ~~^~~
Main.cpp: In function 'int main()':
Main.cpp:52:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
52 | scanf("%d", &Q);
| ~~~~~^~~~~~~~~~
Main.cpp:64:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
64 | scanf(" %c%d%d", &c, &l, &r);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |