#include<iostream>
#include<vector>
#include<set>
using namespace std;
using ll = long long int;
ll mod = 1e9 + 7;
ll get_el(ll x, ll y, ll m){
return x*m + y + 1;
}
int main(){
int n, m, k; cin>>n>>m>>k;
vector<ll> row_mults(n, 1), col_mults(m, 1);
set<int> rows_a;
set<int> cols_a;
for(int _=0; _<k; _++){
char s; int x; ll y;
cin>>s>>x>>y; x--;
if(y == 1) continue;
if(s == 'R'){
row_mults[x] *= y;
row_mults[x] %= mod;
rows_a.insert(x);
}
if(s == 'S'){
col_mults[x] *= y;
col_mults[x] %= mod;
cols_a.insert(x);
}
}
vector<ll> row_sum(n), col_sum(m);
for(int i=0; i<n; i++){
ll a = ll(i)*ll(m) + 1LL;
row_sum[i] = ll(m)*(2LL*a + ll(m-1)) / 2LL;
row_sum[i] %= mod;
}
for(int i=0; i<m; i++){
ll a = i+1;
col_sum[i] = ll(n)*(2LL*a + ll(n-1)*ll(m)) / 2LL;
col_sum[i] %= mod;
}
ll answer = 0;
for(auto &el: row_sum){
answer+=el;
answer %= mod;
}
// cout<<"Answer raw: "<<answer<<"\n";
for(auto &i: rows_a){
// cout<<"Row "<<i<<": mult "<<row_mults[i]<<" sum "<<row_sum[i]<<" added "<<(row_mults[i]-1)*row_sum[i]<<"\n";
answer += (row_mults[i]-1) * row_sum[i];
answer %= mod;
}
for(auto &i: cols_a){
// cout<<"Col "<<i<<": mult "<<col_mults[i]<<" sum "<<col_sum[i]<<" added "<<(col_mults[i]-1)*col_sum[i]<<"\n";
answer += (col_mults[i]-1) * col_sum[i];
answer %= mod;
}
// cout<<"Answer mid: "<<answer<<"\n";
for(auto &r: rows_a){
for(auto &c: cols_a){
ll cell = get_el(r, c, m);
ll min1 = (row_mults[r]-1) * cell;
ll min2 = (col_mults[c]-1) * cell;
ll add = (row_mults[r] * col_mults[c] -1) *cell;
min1 %= mod;
min2 %= mod;
add %= mod;
if(answer < min1) answer += mod;
answer -= min1;
answer %= mod;
if(answer < min2) answer += mod;
answer -= min2;
answer %= mod;
answer += add;
answer %= mod;
}
}
cout<<answer<<"\n";
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |