题目
有一个大小为 n∗n 的矩阵,每个位置的值为该位置的行数+列数。
接下来有 q 次操作:
R m:输出第 m 行的总和并整行消去。
C m:输出第 m 列的总和并整列消去。
话不多说直接上代码
#include<bits/stdc++.h>
using namespace std;
long long n,m,r,l,a,b,x,sum;//l保存删列索引和,r保存删行索引和,
bool vis1[1000001],vis2[1000001];//a保存剩余列数,b保存剩余行数
char c;
int main(){
cin>>n>>m;
sum=(n+1)*n/2,a=b=n;
for(int i=1;i<=m;i++){
cin>>c>>x;
if(c=='R'){
if(vis1[x])cout<<0<<endl;//如果删掉了直接输出0
else{
vis1[x]=1;//记录这行被删了
cout<<x*a-l+sum<<endl;//公式
b--;
r+=x;
}
}else{//同上
if(vis2[x])cout<<0<<endl;
else{
vis2[x]=1;
cout<<x*b-r+sum<<endl;
a--;
l+=x;
}
}
}
return 0;
}