답안 #981967

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
981967 2024-05-13T17:23:18 Z nnin 서열 (APIO23_sequence) C++17
31 / 100
685 ms 74836 KB
#include "sequence.h"
#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define f first
#define s second

vector<int> ct[500005];
int N;

struct segTree {
  pii seg[4*500005];
  int lazy[4*500005];

  void laze2(int i, int add) {
    seg[i] = {seg[i].f+add, seg[i].s+add};
    lazy[i] += add;
  }
  void laze(int i, int l, int r) {
    if(l!=r) {
      laze2(i*2+1, lazy[i]);
      laze2(i*2+2, lazy[i]);
    }
    lazy[i] = 0;
  }

  void build(int i, int l, int r) {
    lazy[i] = 0;
    if(l==r) {
      seg[i].f = seg[i].s = l;
      return;
    }
    int m = (l+r)/2;
    build(i*2+1, l, m);
    build(i*2+2, m+1, r);
    seg[i].f = min(seg[i*2+1].f, seg[i*2+2].f);
    seg[i].s = max(seg[i*2+1].s, seg[i*2+2].s);
  }
  void build() {
    build(0, 0, N);
  }

  void update(int i, int l, int r, int wl, int wr, int val) {
    if(wl<=l && wr>=r) {
      laze2(i, val);
      return;
    }
    laze(i, l, r);
    if(wl>r || wr<l) return;
    int m = (l+r)/2;
    update(i*2+1, l, m, wl, wr, val);
    update(i*2+2, m+1, r, wl, wr, val);
    seg[i].f = min(seg[i*2+1].f, seg[i*2+2].f);
    seg[i].s = max(seg[i*2+1].s, seg[i*2+2].s);
  }
  void update(int wl, int wr, int val) {
    update(0, 0, N, wl, wr, val);
  }

  pii query(int i, int l, int r, int wl, int wr) {
    laze(i, l, r);
    if(wl>r || wr<l) return {(int)1e9, (int)-1e9};
    if(wl<=l && wr>=r) return seg[i];
    int m = (l+r)/2;
    pii q1 = query(i*2+1, l, m, wl, wr);
    pii q2 = query(i*2+2, m+1, r, wl, wr);
    return {min(q1.f, q2.f), max(q1.s, q2.s)};
  }
  pii query(int wl, int wr) {
    return query(0, 0, N, wl, wr);
  }
} les, mor;

int sequence(int n, std::vector<int> A) {
  N = n;
  for(int i=0;i<N;i++) {
    ct[A[i]].push_back(i+1);
  }
  les.build();
  mor.build();
  int ans = 1;
  for(int i=1;i<=N;i++) {
    for(int j:ct[i]) {
      les.update(j, N, -2);
    }
    for(int j=0;j+ans<ct[i].size();j++) {
      while(j+ans<ct[i].size()) {  
        int st = ct[i][j];
        int en = ct[i][j+ans];
        int qles = les.query(en, N).f - les.query(0, st-1).s;
        int qmor = mor.query(en, N).s - les.query(0, st-1).f;
        if(qles<=0 && qmor>=0) ans++;
        else break;
      }
    }
    for(int j:ct[i]) {
      mor.update(j, N, -2);
    }
  }
  return ans;
}

Compilation message

sequence.cpp: In function 'int sequence(int, std::vector<int>)':
sequence.cpp:86:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |     for(int j=0;j+ans<ct[i].size();j++) {
      |                 ~~~~~^~~~~~~~~~~~~
sequence.cpp:87:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |       while(j+ans<ct[i].size()) {
      |             ~~~~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 46680 KB Output is correct
2 Correct 7 ms 46788 KB Output is correct
3 Correct 9 ms 46684 KB Output is correct
4 Correct 8 ms 46684 KB Output is correct
5 Correct 9 ms 46684 KB Output is correct
6 Correct 8 ms 46684 KB Output is correct
7 Correct 10 ms 46684 KB Output is correct
8 Correct 8 ms 46936 KB Output is correct
9 Correct 8 ms 46616 KB Output is correct
10 Correct 8 ms 46684 KB Output is correct
11 Correct 7 ms 46684 KB Output is correct
12 Correct 8 ms 46684 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 46680 KB Output is correct
2 Correct 7 ms 46788 KB Output is correct
3 Correct 9 ms 46684 KB Output is correct
4 Correct 8 ms 46684 KB Output is correct
5 Correct 9 ms 46684 KB Output is correct
6 Correct 8 ms 46684 KB Output is correct
7 Correct 10 ms 46684 KB Output is correct
8 Correct 8 ms 46936 KB Output is correct
9 Correct 8 ms 46616 KB Output is correct
10 Correct 8 ms 46684 KB Output is correct
11 Correct 7 ms 46684 KB Output is correct
12 Correct 8 ms 46684 KB Output is correct
13 Correct 10 ms 46684 KB Output is correct
14 Correct 9 ms 46680 KB Output is correct
15 Correct 9 ms 46684 KB Output is correct
16 Correct 9 ms 46684 KB Output is correct
17 Correct 9 ms 46684 KB Output is correct
18 Correct 10 ms 46680 KB Output is correct
19 Correct 8 ms 46684 KB Output is correct
20 Correct 9 ms 46680 KB Output is correct
21 Incorrect 9 ms 46684 KB Output isn't correct
22 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 46680 KB Output is correct
2 Correct 330 ms 68880 KB Output is correct
3 Correct 330 ms 68868 KB Output is correct
4 Correct 491 ms 60892 KB Output is correct
5 Correct 371 ms 67928 KB Output is correct
6 Correct 322 ms 67740 KB Output is correct
7 Correct 310 ms 61424 KB Output is correct
8 Correct 366 ms 61564 KB Output is correct
9 Correct 502 ms 61036 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 46788 KB Output is correct
2 Correct 507 ms 61184 KB Output is correct
3 Correct 548 ms 61056 KB Output is correct
4 Correct 565 ms 62036 KB Output is correct
5 Correct 685 ms 62392 KB Output is correct
6 Incorrect 573 ms 62112 KB Output isn't correct
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 426 ms 74832 KB Output is correct
2 Correct 406 ms 74836 KB Output is correct
3 Correct 428 ms 73808 KB Output is correct
4 Correct 446 ms 74368 KB Output is correct
5 Correct 468 ms 70736 KB Output is correct
6 Correct 465 ms 70696 KB Output is correct
7 Correct 428 ms 69716 KB Output is correct
8 Correct 360 ms 69004 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 46680 KB Output is correct
2 Correct 7 ms 46788 KB Output is correct
3 Correct 9 ms 46684 KB Output is correct
4 Correct 8 ms 46684 KB Output is correct
5 Correct 9 ms 46684 KB Output is correct
6 Correct 8 ms 46684 KB Output is correct
7 Correct 10 ms 46684 KB Output is correct
8 Correct 8 ms 46936 KB Output is correct
9 Correct 8 ms 46616 KB Output is correct
10 Correct 8 ms 46684 KB Output is correct
11 Correct 7 ms 46684 KB Output is correct
12 Correct 8 ms 46684 KB Output is correct
13 Correct 10 ms 46684 KB Output is correct
14 Correct 9 ms 46680 KB Output is correct
15 Correct 9 ms 46684 KB Output is correct
16 Correct 9 ms 46684 KB Output is correct
17 Correct 9 ms 46684 KB Output is correct
18 Correct 10 ms 46680 KB Output is correct
19 Correct 8 ms 46684 KB Output is correct
20 Correct 9 ms 46680 KB Output is correct
21 Incorrect 9 ms 46684 KB Output isn't correct
22 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 46680 KB Output is correct
2 Correct 7 ms 46788 KB Output is correct
3 Correct 9 ms 46684 KB Output is correct
4 Correct 8 ms 46684 KB Output is correct
5 Correct 9 ms 46684 KB Output is correct
6 Correct 8 ms 46684 KB Output is correct
7 Correct 10 ms 46684 KB Output is correct
8 Correct 8 ms 46936 KB Output is correct
9 Correct 8 ms 46616 KB Output is correct
10 Correct 8 ms 46684 KB Output is correct
11 Correct 7 ms 46684 KB Output is correct
12 Correct 8 ms 46684 KB Output is correct
13 Correct 10 ms 46684 KB Output is correct
14 Correct 9 ms 46680 KB Output is correct
15 Correct 9 ms 46684 KB Output is correct
16 Correct 9 ms 46684 KB Output is correct
17 Correct 9 ms 46684 KB Output is correct
18 Correct 10 ms 46680 KB Output is correct
19 Correct 8 ms 46684 KB Output is correct
20 Correct 9 ms 46680 KB Output is correct
21 Incorrect 9 ms 46684 KB Output isn't correct
22 Halted 0 ms 0 KB -