제출 #547237

#제출 시각아이디문제언어결과실행 시간메모리
547237DP_196Global Warming (CEOI18_glo)C++14
100 / 100
123 ms7368 KiB
#include<bits/stdc++.h>

using namespace std;
const int N = 2e5 + 5;
const int INF = (int) 1e9 + 7;
int n, d, a[N], dp1[N], dp2[N], tmp[N], bit[N], c[N], res;
vector<int> b;

struct BIT {
    void update(int id, int val) {
        for (; id; id -= (id & (-id))) bit[id] = max(bit[id], val);
    }

    int get(int id) {
        int res = 0;
        for (; id <= n; id += (id & (-id))) res =  max(res, bit[id]);
        return res;
    }
}  myBit;

void init() {
    for (int i = 1; i <= n; i++) {
        dp1[i] = lower_bound(tmp + 1, tmp + res + 1, a[i]) - tmp;
        res = max(res, dp1[i]);
        tmp[dp1[i]] = a[i];
    }

    for (int i = n; i >= 1; --i) {
    	dp2[i] = myBit.get(c[i] + 1) + 1;
    	myBit.update(c[i], dp2[i]);
    }
}

#define TASK "LIS"
int main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    if (fopen(TASK".inp","r")) {
        freopen(TASK".inp","r",stdin);
        freopen(TASK".out","w",stdout);
    }

    cin >> n >> d;

    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        b.push_back(a[i]);
    }

    sort(b.begin(), b.end());
    for (int i = 1; i <= n; i++) c[i] = lower_bound(b.begin(), b.end(), a[i]) - b.begin() + 1;
    init();

    int result = 0;
    memset(bit, 0, sizeof bit);
    myBit.update(c[n], dp2[n]);

    for (int i = n - 1; i >= 1; i--) {
        int pos = upper_bound(b.begin(), b.end(), a[i] - d) - b.begin() + 1;
        result = max(result, dp1[i] + myBit.get(pos));
        myBit.update(c[i], dp2[i]);
    }

    cout << result;
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

glo.cpp: In function 'int main()':
glo.cpp:39:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |         freopen(TASK".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
glo.cpp:40:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |         freopen(TASK".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...