应该不会是炸 int
吧。
#include <bits/stdc++.h>
#ifndef ONLINE_JUDGE
#define debug(...) fprintf(stderr,__VA_ARGS__)
#else
#define debug(...)
#endif
using namespace std;
using namespace chrono;
typedef signed char i8;typedef short i16;typedef int i32;typedef long long i64;typedef unsigned char u8;typedef unsigned short u16;typedef unsigned u32;typedef unsigned long long u64;typedef float f32;typedef double f64;typedef long double f96;
template<typename A,typename B>void to_max(A& a,B b){if(a<b)a=b;}
template<typename A,typename B>void to_min(A& a,B b){if(b<a)a=b;}
#define __use_fast_io
namespace fast_io{
#ifndef __cplusplus
#define __cplusplus 201402L
#endif
const unsigned is(1<<21),os(1<<14);bool ne;char i[is],o[os],*ib(i),*ie(i),*ob(o),*oe(o+os),a[20],&c(*a),*b;void f(){ob-=fwrite(o,1,ob-o,stdout);}void p(char c){if(ob==oe)f();*ob++=c;}template<typename T>void _write(T&r){if(r==0)return p('0');if(r<0)p('-'),r=~(r-1);for(b=a;r;r/=10)*++b=(r%10)^'0';while(b!=a)p(*b--);}
#define g (ib==ie&&(ie=(ib=i)+fread(i,1,is,stdin),ib==ie)?-1:*ib++)
void reads(char*s){for(c=g;~c&&isspace(c);c=g);for(*s++=c,c=g;~c&&!isspace(c);c=g)*s++=c;*s=0;}template<typename T>void read(T&r){ne=false;for(c=g;~c&&(c<'0'||c>'9');c=g)ne=(c=='-');for(r=c^'0',c=g;isdigit(c);c=g)r=(r<<3)+(r<<1)+(c^'0');if(ne)r=~(r-1);}template<>void read<char>(char&r){for(c=g;~c&&isspace(c);c=g);r=c;}template<>void read<string>(string&r){r.clear();for(c=g;~c&&isspace(c);c=g);for(r.push_back(c),c=g;~c&&!isspace(c);c=g)r.push_back(c);}
#undef g
#if(__cplusplus>=201703L)
template<typename...Args>void read(Args&...args){(read(args),...);}template<typename...Args>void _write(Args&...args){(_write(args),...);}
#else
template<typename T,typename...args>void read(T&a,args&...b){read(a);read(b...);}template<typename T,typename...args>void _write(T&a,args&...b){_write(a);_write(b...);}
#endif
template<>void _write<char>(char&r){p(r);}template<>void _write<char*>(char*&r){for(;*r;p(*r++));}template<>void _write<const char*>(const char*&r){for(;*r;p(*r++));}template<>void _write<string>(string&r){const char*s(r.data());_write(s);}template<typename...args>void write(args...a){_write(a...);}struct _des{~_des(){f();}}d;}using fast_io::read;using fast_io::reads;using fast_io::write;
constexpr int N(3e5+5);
int n,m,q,sta[N<<5],top;
struct node{
int ch[2],fa;
i64 sz,l,r;
node():fa(0){
ch[0]=ch[1]=0;
}
node(i64 _l,i64 _r,int _fa=0):fa(_fa),sz(_r-_l+1),l(_l),r(_r){
ch[0]=ch[1]=0;
}
}t[N<<5];
#define ls(u) t[u].ch[0]
#define rs(u) t[u].ch[1]
#define fa(u) t[u].fa
#define sz(u) t[u].sz
#define le(u) t[u].l
#define ri(u) t[u].r
#define dir(u) (rs(fa(u))==u)
i64 new_node(i64 l,i64 r,int fa=0){
int u(sta[--top]);
t[u]=node(l,r,fa);
return u;
}
struct splay_tree{
int root;
splay_tree():root(0){}
void push_up(int u){
sz(u)=sz(ls(u))+sz(rs(u))+ri(u)-le(u)+1;
}
void init(){
root=new_node(0,0);
rs(root)=new_node(N,N,root);
push_up(root);
}
void init(i64 l,i64 r){
root=new_node(0,0);
rs(root)=new_node(N,N,root);
ls(rs(root))=new_node(l,r,rs(root));
push_up(rs(root));
push_up(root);
}
void rotate(int u){
bool d(dir(u));
int f(fa(u)),g(fa(f));
t[f].ch[d]=t[u].ch[d^true];
if(t[f].ch[d]){
fa(t[f].ch[d])=f;
}
t[u].ch[d^true]=f;
if(g){
t[g].ch[dir(f)]=u;
}else{
root=u;
}
fa(f)=u;fa(u)=g;
push_up(f);push_up(u);
}
void splay(int u,int p=0){
for(int f;(f=fa(u))!=p;rotate(u)){
if(fa(f)!=p){
rotate(dir(u)^dir(f)?u:f);
}
}
}
int kth_node(i64 k){
int u(root);
i64 l,r;
while(true){
l=sz(ls(u))+1;
r=l+ri(u)-le(u);
if(k<l){
u=ls(u);
}else if(k<=r){
return u;
}else{
k-=r;
u=rs(u);
}
}
return -1;
}
void split(i64 pos){
int u(kth_node(pos));
i64 l,r;
splay(u);
pos-=sz(ls(u));
pos+=le(u)-1;
if(ri(u)!=pos){
l=pos+1;r=ri(u);
ri(u)=pos;
u=rs(u);
while(ls(u)){
u=ls(u);
}
ls(u)=new_node(l,r,u);
splay(ls(u));
}
}
i64 erase(i64 pos){
++pos;
split(pos-1);
split(pos);
int u(kth_node(pos-1)),v(kth_node(pos+1));
i64 res;
splay(u);splay(v,u);
res=le(ls(v));
sta[top++]=ls(v);
ls(v)=0;
push_up(v);push_up(u);
return res;
}
void add(i64 pos,i64 id){
++pos;
int u(kth_node(pos-1));
splay(u);
u=rs(u);
while(ls(u)){
u=ls(u);
}
ls(u)=new_node(id,id,u);
splay(ls(u));
}
}tree[N],last_col;
void reset_nodes(){
int i;
for(i=(N<<5)-1;i;--i){
sta[top++]=i;
}
}
void corner_solve(){
int i,x,y;
i64 res;
last_col.init(1,n);
for(i=1;i<=q;++i){
read(x,y);
res=last_col.erase(x);
last_col.add(n,res);
write(res,'\n');
}
}
int main(){
reset_nodes();
int i,x,y;
i64 res,res1;
read(n,m,q);
if(m==1){
corner_solve();
return 0;
}
last_col.init();
for(i=1;i<=n;++i){
tree[i].init((i-1ll)*m+1,(i64)(i)*m-1);
last_col.add(i,(i64)(i)*m);
}
for(i=1;i<=q;++i){
read(x,y);
if(y==m){
res=last_col.erase(x);
last_col.add(n,x);
}else{
res=tree[x].erase(y);
res1=last_col.erase(x);
tree[x].add(m-1,res1);
last_col.add(n,res);
}
write(res,'\n');
}
return 0;
}