QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#645148#7926. Color Inversion on a Huge ChessboardAFLeartLey0103#WA 96ms28548kbC++142.4kb2024-10-16 17:04:282024-10-16 17:04:28

Judging History

你现在查看的是最新测评结果

  • [2024-10-16 17:04:28]
  • 评测
  • 测评结果:WA
  • 用时:96ms
  • 内存:28548kb
  • [2024-10-16 17:04:28]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 5e5+50;
int n, q;
class obj{
public:
  mutable int l, r;
  int color;
  friend bool operator<(obj a, obj b){ return a.r < b.r; }
};
int col[maxn], row[maxn];
set<obj> scol, srow;

void edit_col(int u){
  auto it = scol.lower_bound({0, u});
  int l = it->l, r = it->r, color = it->color;
  if(l == r){
    auto lit = it, rit = it;
    if(l != 1) lit--; if(r != n) rit++;
    int _l = lit->l, _r = rit->r;
    if(l != 1) scol.erase(lit); if(r != n) scol.erase(rit);
    scol.erase(it);
    scol.insert({_l, _r, color^1});
  }
  else if(l == u){
    if(l == 1) {
      it->l++; scol.insert({u, u, color^1});
    }
    else{
    auto lit = it; lit--;
    it->l++, lit->r++;
    }
  }
  else if(r == u){
    if(r == n) {
      it->r--; scol.insert({u, u, color^1});
    }
    else{
    auto rit = it; rit++;
    it->r++, rit->l++;
    }
  }
  else{
    scol.erase(it);
    scol.insert({l, u-1, color^1});
    scol.insert({u+1, r, color^1});
    scol.insert({u, u, color});
  }
}

void edit_row(int u){
  auto it = srow.lower_bound({0, u});
  int l = it->l, r = it->r, color = it->color;
  if(l == r){
    auto lit = it, rit = it;
    if(l != 1) lit--; if(r != n) rit++;
    int _l = lit->l, _r = rit->r;
    if(l != 1) srow.erase(lit); if(r != n) srow.erase(rit);
    srow.erase(it);
    srow.insert({_l, _r, color^1});
  }
  else if(l == u){
    if(l == 1) {it->l++; srow.insert({u, u, color^1});}
    else{
    auto lit = it; lit--;
    it->l++, lit->r--;
    }
  }
  else if(r == u){
    if(r == n) {it->r--; srow.insert({u, u, color^1});}
    else{
    auto rit = it; rit++;
    it->r++, rit->l++;
    }
  }
  else{
    srow.erase(it);
    srow.insert({l, u-1, color^1});
    srow.insert({u+1, r, color^1});
    srow.insert({u, u, color});
  }
}
signed main(){
  cin >> n >> q;
  for(int i = 1, id = 0; i <= n; ++ i, id ^= 1){
    scol.insert({i,i,id}); srow.insert({i,i,id});
  }
  while(q--){
    string s; cin >> s;
    int u; cin >> u;
    if(s[0] == 'R'){
      edit_row(u);
    }
    else {
      edit_col(u);
    }/*
    for(auto i:scol) cerr << i.l << ' ' << i.r << ' ' << i.color << '\n';
    for(auto i:scol) cerr << i.l << ' ' << i.r << ' ' << i.color << '\n';
    cerr << "ans:";*/
    cout << scol.size() * srow.size() << '\n';
  }
  return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3492kb

input:

3 3
ROW 2
COLUMN 3
ROW 2

output:

3
2
6

result:

ok 3 lines

Test #2:

score: 0
Accepted
time: 96ms
memory: 28548kb

input:

200000 2
ROW 1
ROW 1

output:

39999800000
40000000000

result:

ok 2 lines

Test #3:

score: 0
Accepted
time: 0ms
memory: 3580kb

input:

1 1
COLUMN 1

output:

1

result:

ok single line: '1'

Test #4:

score: 0
Accepted
time: 1ms
memory: 3620kb

input:

1 100
COLUMN 1
COLUMN 1
ROW 1
ROW 1
COLUMN 1
ROW 1
COLUMN 1
COLUMN 1
ROW 1
ROW 1
COLUMN 1
COLUMN 1
ROW 1
COLUMN 1
COLUMN 1
COLUMN 1
ROW 1
COLUMN 1
ROW 1
COLUMN 1
COLUMN 1
ROW 1
COLUMN 1
COLUMN 1
ROW 1
COLUMN 1
COLUMN 1
ROW 1
COLUMN 1
COLUMN 1
ROW 1
COLUMN 1
COLUMN 1
ROW 1
COLUMN 1
ROW 1
COLUMN 1
COL...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

result:

ok 100 lines

Test #5:

score: 0
Accepted
time: 0ms
memory: 3608kb

input:

2 100
COLUMN 2
ROW 1
COLUMN 2
COLUMN 2
ROW 2
ROW 1
COLUMN 1
COLUMN 1
COLUMN 1
ROW 1
ROW 1
ROW 1
COLUMN 1
ROW 2
COLUMN 1
COLUMN 2
COLUMN 1
ROW 1
ROW 2
ROW 1
COLUMN 2
ROW 2
ROW 2
COLUMN 2
COLUMN 1
ROW 2
COLUMN 2
ROW 1
ROW 2
ROW 1
ROW 1
COLUMN 2
COLUMN 2
COLUMN 2
COLUMN 2
ROW 2
ROW 1
ROW 1
COLUMN 1
ROW...

output:

2
1
2
1
2
1
2
1
2
4
2
4
2
1
2
1
2
4
2
4
2
1
2
4
2
1
2
4
2
4
2
1
2
1
2
4
2
4
2
1
2
1
2
1
2
4
2
4
2
4
2
4
2
4
2
1
2
1
2
1
2
4
2
1
2
4
2
4
2
1
2
1
2
4
2
1
2
4
2
1
2
4
2
1
2
4
2
4
2
1
2
4
2
1
2
4
2
4
2
4

result:

ok 100 lines

Test #6:

score: -100
Wrong Answer
time: 1ms
memory: 3544kb

input:

3 100
ROW 1
ROW 1
COLUMN 3
ROW 3
ROW 2
COLUMN 2
ROW 3
COLUMN 3
COLUMN 2
COLUMN 1
ROW 3
ROW 2
ROW 2
COLUMN 3
ROW 3
COLUMN 2
COLUMN 2
ROW 2
COLUMN 3
COLUMN 1
COLUMN 2
COLUMN 2
ROW 1
ROW 1
COLUMN 3
ROW 2
COLUMN 2
COLUMN 3
ROW 3
COLUMN 1
ROW 3
COLUMN 2
COLUMN 1
ROW 3
ROW 3
COLUMN 2
COLUMN 2
COLUMN 1
ROW...

output:

6
9
6
4
4
4
2
1
3
2
4
4
6
3
4
12
4
2
4
6
2
6
9
6
4
4
4
2
2
4
6
6
9
6
9
3
9
6
8
4
2
4
4
6
6
9
6
6
9
12
6
4
2
4
4
4
4
6
9
6
9
12
8
8
8
4
6
9
6
4
2
3
6
9
12
8
4
2
4
4
4
6
2
6
9
6
2
4
3
6
4
6
4
2
3
6
9
12
9
6

result:

wrong answer 13th lines differ - expected: '4', found: '6'