제출 #785599

#제출 시각아이디문제언어결과실행 시간메모리
785599devariaotaGlobal Warming (CEOI18_glo)C++17
5 / 100
2084 ms9932 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int n, x, t[200005], ans = 0; int sg[200005]; void build(int index, int l, int r) { if (l == r) { sg[index] = INT_MIN; return; } int m = (l+r)/2; build(index*2, l, m); build(index*2+1, m+1, r); sg[index] = max(sg[index*2], sg[index*2+1]); } int query(int index, int l, int r, int x, int y) { if (x <= l and y >= r) return sg[index]; else if ((l < x and r < x) or (l > y and r > y)) return INT_MIN; int m = (l+r)/2; return max(query(index*2, l, m, x, y), query(index*2+1, m+1, r, x, y)); } void update(int index, int l, int r, int pos, int val) { if (pos < l or pos > r) return; else if (l == r) { sg[index] = val; return; } int m = (l+r)/2; if (pos <= m) { update(index*2, l, m, pos, val); } else update(index*2+1, m+1, r, pos, val); sg[index] = max(sg[index*2], sg[index*2+1]); } void solve(int l, int r, int s) { // cout << "loop : " << l << " " << r << " " << s << endl; map<int, int> maks; set<int, greater<int>> memo; set<int>::iterator it; vector<int> compress; map<int, int> idx; build(1, 0, n); int cur; for (int i = l; i <= r; i++) { t[i] += s; compress.push_back(t[i]); } for (int i = 0; i < compress.size(); i++) { idx[compress[i]] = i; } stack<int> st; int temp, temp2; for (int i = 1; i <= n; i++) { while (!st.empty()) { if (t[i] <= st.top()) st.pop(); else break; } st.push(t[i]); memo.insert(t[i]); temp = st.size(); // update(1, 0, n, t[i]) temp2 = query(1, 0, n, idx[t[i]], idx[t[i]]); if (temp > temp2) { update(1, 0, n, idx[t[i]], temp); } // maks[t[i]] = max(maks[t[i]], temp); // if (memo.size() > 1) { // for (it = memo.begin(); it != memo.end(); it++) { // if ((*it) == t[i]) break; // } // it++; // if (it != memo.end()) { // maks[t[i]] = max(maks[t[i]], maks[*it]+1); // } // } // for (it = memo.begin(); it != memo.end(); it++) { // if ((*it) < t[i]) { // maks[t[i]] = max(maks[t[i]], maks[*it]+1); // } // } update(1, 0, n, idx[t[i]], query(1, 0, n, 0, idx[t[i]])); temp = query(1, 0, n, 0, idx[t[i]]); // cout << i << " " << t[i] << " " << temp << endl; ans = max(temp, ans); } for (int i = l; i <= r; i++) { t[i] -= s; } } signed main() { cin >> n >> x; for (int i = 1; i <= n; i++) cin >> t[i]; if (x == 0) { solve(1, n, 0); cout << ans << endl; return 0; } for (int l = 1; l <= n; l++) { for (int r = l; r <= n; r++) { for (int s = -x; s <= x; s++) { solve(l, r, s); } } } cout << ans << endl; }

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

glo.cpp: In function 'void solve(long long int, long long int, long long int)':
glo.cpp:62:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |   for (int i = 0; i < compress.size(); i++) {
      |                   ~~^~~~~~~~~~~~~~~~~
glo.cpp:56:7: warning: unused variable 'cur' [-Wunused-variable]
   56 |   int cur;
      |       ^~~
#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...