// aginaginaginaginaginaginaginaginaginagin
#include <cstdio>
#include <algorithm>
#include <cstring>
#define lp (p << 1)
#define rp (p << 1 | 1)
#define mid ((l+r)>>1)
#define lson lp, l, mid
#define rson rp, mid+1, r
typedef long long int64;
const int INF = 0x3f3f3f3f;
// begin cxk
inline int read(){
int x=0,f=1;char c;
for(c=getchar();c<'0'||c>'9';f=((c=='-')?-1:f),c=getchar());
for(;c>='0'&&c<='9';x=x*10+c-'0',c=getchar());
return x*f;
}
inline void read(int &x) {
x=read();
}
inline void read(char *s) {
char ch;
do ch=getchar(); while(ch<=' ');
while(ch>' '){
(*s)=ch;
s++;
ch=getchar();
}
}
inline void write(int64 a){
if(a==0){putchar('0');return;}
if(a<0)putchar('-'),a=-a;
char c1[120];
int h=0;
while(a)c1[++h]=a%10+'0',a/=10;
for(int i=h;i>=1;i--)putchar(c1[i]);
return;
}
inline void write_(int64 a){write(a);putchar(' ');}
inline void writeln(int64 a){write(a);putchar('\n');}
// end cxk
const int MAXN = 1000000 + 10;
const int P = 1<<20;
//const int MAXN = 1000 + 10;
//const int P = 1<<4;
int n, m, q;
int segl[2][P << 1], segr[2][P << 1];
int res[2][P << 1];
inline void up(bool v, int p) {
segl[v][p]=std::min(segl[v][lp], segl[v][rp]);
segr[v][p]=std::max(segr[v][lp], segr[v][rp]);
res[v][p]=std::max(res[v][lp], res[v][rp]);
if(segl[v][rp]-segr[v][lp]>0
and segl[v][rp]^INF and segr[v][lp]) res[v][p]=std::max(res[v][p], segl[v][rp]-segr[v][lp]);
}
inline void ins(bool v, int x) {
x+=P;
segl[v][x]=segr[v][x]=x-P;
for(x>>=1; x; x>>=1)
up(v, x);
}
char s[50];
int main() {
freopen("cake.in", "r", stdin);
freopen("cake.out", "w", stdout);
int i, x;
memset(segl, 0x3f, sizeof(segl));
memset(segr, 0, sizeof(segr));
memset(res, 0, sizeof(res));
scanf("%d %d %d", &n, &m, &q);
n++;
m++;
ins(0, 1);
ins(0, n);
ins(1, 1);
ins(1, m);
for(i=1; i<=q; i++) {
read(s);
read(x);
x++;
if(s[0]=='V')
ins(0, x);
else
ins(1, x);
writeln((int64)res[0][1]*res[1][1]);
}
return 0;
}
| Compilation | N/A | N/A | Compile Error | Score: N/A | 显示更多 |