답안 #896050

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
896050 2023-12-31T14:14:42 Z n3rm1n Temperature (POI11_tem) C++17
100 / 100
839 ms 18004 KB
#include<bits/stdc++.h>
#define endl '\n'
#pragma GCC optimize("Ofast")
using namespace std;
const int MAXN = 1e6 + 10;
void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}
int n;
int ad[MAXN], au[MAXN];
int inf = -1e9-10;
void read()
{
    cin >> n;
    int xx, yy;
    for (int i = 1; i <= n; ++ i)
    {
        cin >> ad[i] >> au[i];
    }
}
int t[MAXN * 4];
void make_tree(int i, int l, int r)
{
    if(l == r)
    {
        t[i] = ad[l];
        return;
    }
    int mid = (l + r)/2;
    make_tree(2*i, l, mid);
    make_tree(2*i+1, mid+1, r);
    t[i] = max(t[2*i], t[2*i+1]);
}
int ql, qr;
int query(int i, int l, int r)
{
    if(qr < l || ql > r)return inf;
    if(ql <= l && r <= qr)return t[i];
    int mid = (l + r)/2;
    return max(query(2*i, l, mid), query(2*i+1, mid+1, r));
}
int main()
{
    speed();
 
    read();
    make_tree(1, 1, n);
    int ans = 0;
    int last = 1;
    int left, right, mid, border, maxx;
    for (int i = 1; i <= n; ++ i)
    {
        left = last;
        right = i;
        border = i;
        ql = last;
        qr = i;
        maxx = query(1, 1, n);
        if(maxx <= au[i])
        {
            ans = max(ans, i - last + 1);
            continue;
        }
        while(left <= right)
        {
            mid = (left + right)/2;
            ql = mid;
            qr = i;
            maxx = query(1, 1, n);
            if(maxx > au[i])
            {
                left = mid + 1;
            }
            else
            {
                border = mid;
                right = mid - 1;
            }
        }
        last = border;
        //cout << i << " " << border << endl;
        ans = max(ans, i - border + 1);
    }
    cout << ans << endl;
    return 0;
}

Compilation message

tem.cpp: In function 'void read()':
tem.cpp:18:9: warning: unused variable 'xx' [-Wunused-variable]
   18 |     int xx, yy;
      |         ^~
tem.cpp:18:13: warning: unused variable 'yy' [-Wunused-variable]
   18 |     int xx, yy;
      |             ^~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4440 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4444 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4700 KB Output is correct
2 Correct 3 ms 4696 KB Output is correct
3 Correct 4 ms 4700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 109 ms 12752 KB Output is correct
2 Correct 91 ms 12884 KB Output is correct
3 Correct 116 ms 16836 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 203 ms 16976 KB Output is correct
2 Correct 202 ms 17028 KB Output is correct
3 Correct 604 ms 17032 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 233 ms 16980 KB Output is correct
2 Correct 205 ms 17036 KB Output is correct
3 Correct 658 ms 17220 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 271 ms 17112 KB Output is correct
2 Correct 206 ms 17108 KB Output is correct
3 Correct 839 ms 18004 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 614 ms 16980 KB Output is correct
2 Correct 397 ms 17096 KB Output is correct
3 Correct 203 ms 16980 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 176 ms 16976 KB Output is correct
2 Correct 156 ms 16980 KB Output is correct
3 Correct 147 ms 16976 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 188 ms 16980 KB Output is correct
2 Correct 160 ms 16976 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 219 ms 16976 KB Output is correct
2 Correct 778 ms 17744 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 217 ms 16976 KB Output is correct
2 Correct 708 ms 17236 KB Output is correct