답안 #894525

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
894525 2023-12-28T11:33:18 Z vjudge1 Index (COCI21_index) C++17
60 / 110
404 ms 10688 KB
#include <bits/stdc++.h>
using namespace std;
 
#define speed ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define rall(x) x.rbegin(), x.rend()
#define all(x) x.begin(), x.end()
#define sz(x) (int)x.size()
#define mp make_pair
#define pb push_back
#define F first
#define S second
#define nl '\n'
//#define int long long
 
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef long double ld;
 
const int N = 2e5 + 5;
const int M = 1e3 + 5;
const int inf = 1e9 + 123;
const ll infl = 1e15 + 10;
const int mod = 1e9 + 7;
const int P = 31;
const int block = 300;
 
int n, q, MX, a[N], t[N], ans[N];
 
struct query{
    int l, r, id;
};
 
vector <query> qs;
 

bool cmp(const query& a, const query& b) {
    if(a.l/block < b.l/block)
        return true;
    if(a.l / block > b.l / block)
        return false;
    return a.r < b.r;
}
 
void upd(int v, int tl, int tr, int pos, int x){
    if(tl == tr){
        t[v] += x;
        return;
    }
    int tm = (tl + tr) >> 1;
    if(pos <= tm)
        upd(v + v, tl, tm, pos, x);
    else
        upd(v + v + 1, tm + 1, tr, pos, x);
    t[v] = t[v + v] + t[v + v + 1];
}

int get(int v, int tl, int tr, int l, int r){
    if(tl > r || l > tr)
        return 0;
    if(l <= tl && tr <= r)
        return t[v];
    int tm = (tl + tr) >> 1;
    return get(v + v, tl, tm, l, r) + get(v + v + 1, tm + 1, tr, l, r);
}

void add(int x){
    upd(1, 1, MX, x, 1);
}

void del(int x){
    upd(1, 1, MX, x, -1);
}

void solve() {
    cin >> n >> q;
    for(int i = 1; i <= n; i++)
        cin >> a[i];
    for(int i = 1; i <= q; i++){
        int l, r;
        cin >> l >> r;
        qs.pb({l, r, i});
        MX = max(MX, r);
    }

    sort(all(qs), cmp);
 
    int l = 1, r = 0;
    for(auto Q : qs){
        while (r < Q.r)
            add(a[++r]);
        while (l < Q.l)
            del(a[l++]);
        while (l > Q.l)
            add(a[--l]);
        while(r > Q.r)
            del(a[r--]);
        int l = 1, r = n + 1, mid;
        while(r - l > 1){
            mid = (l + r) >> 1;
            if(get(1, 1, MX, mid, MX) >= mid)
                l = mid; 
            else
                r = mid;
        }
        ans[Q.id] = l;
    }
    for(int i = 1; i <= q; i++)
        cout << ans[i] << nl;
}
 
signed main() { 
    speed;
    int T = 1;
    // cin >> T;
    while (T--)
        solve();
}
 
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2396 KB Output is correct
2 Correct 2 ms 2396 KB Output is correct
3 Correct 2 ms 2396 KB Output is correct
4 Correct 2 ms 2396 KB Output is correct
5 Correct 2 ms 2396 KB Output is correct
6 Correct 2 ms 2396 KB Output is correct
7 Correct 2 ms 2396 KB Output is correct
8 Correct 2 ms 2544 KB Output is correct
9 Correct 2 ms 2396 KB Output is correct
10 Correct 2 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2396 KB Output is correct
2 Correct 2 ms 2396 KB Output is correct
3 Correct 2 ms 2396 KB Output is correct
4 Correct 2 ms 2396 KB Output is correct
5 Correct 2 ms 2396 KB Output is correct
6 Correct 2 ms 2396 KB Output is correct
7 Correct 2 ms 2396 KB Output is correct
8 Correct 2 ms 2544 KB Output is correct
9 Correct 2 ms 2396 KB Output is correct
10 Correct 2 ms 2396 KB Output is correct
11 Correct 392 ms 3660 KB Output is correct
12 Correct 388 ms 3528 KB Output is correct
13 Correct 398 ms 3652 KB Output is correct
14 Correct 387 ms 3660 KB Output is correct
15 Correct 394 ms 3648 KB Output is correct
16 Correct 404 ms 3652 KB Output is correct
17 Correct 390 ms 3784 KB Output is correct
18 Correct 382 ms 3528 KB Output is correct
19 Correct 387 ms 3672 KB Output is correct
20 Correct 392 ms 3648 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2396 KB Output is correct
2 Correct 2 ms 2396 KB Output is correct
3 Correct 2 ms 2396 KB Output is correct
4 Correct 2 ms 2396 KB Output is correct
5 Correct 2 ms 2396 KB Output is correct
6 Correct 2 ms 2396 KB Output is correct
7 Correct 2 ms 2396 KB Output is correct
8 Correct 2 ms 2544 KB Output is correct
9 Correct 2 ms 2396 KB Output is correct
10 Correct 2 ms 2396 KB Output is correct
11 Correct 392 ms 3660 KB Output is correct
12 Correct 388 ms 3528 KB Output is correct
13 Correct 398 ms 3652 KB Output is correct
14 Correct 387 ms 3660 KB Output is correct
15 Correct 394 ms 3648 KB Output is correct
16 Correct 404 ms 3652 KB Output is correct
17 Correct 390 ms 3784 KB Output is correct
18 Correct 382 ms 3528 KB Output is correct
19 Correct 387 ms 3672 KB Output is correct
20 Correct 392 ms 3648 KB Output is correct
21 Runtime error 75 ms 10688 KB Execution killed with signal 11
22 Halted 0 ms 0 KB -