답안 #894301

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
894301 2023-12-28T04:14:58 Z vjudge1 Index (COCI21_index) C++17
60 / 110
2500 ms 9804 KB
#include <bits/stdc++.h>
#define ll long long
#define all(a) a.begin(), a.end()
#define F first
#define S second
#define pb push_back
#define eb emplace_back
#define ull unsigned long long
#define ld long double
#define lv v+v
#define rv v+v+1
#define files freopen("expert.in", "r", stdin), freopen("expert.out", "w", stdout)
using namespace std;
const ll mod = 1e9 + 7;
const ll N = 2e5 + 10;
const ll P = 337ll;
const ld EPS = 1e-9;
const ll block = 450;
ll n,qq,a[N],ans[N], t[200000 + 10], MAXNUM=0, MINNUM = LLONG_MAX,cur = 0,l=0,r=0;
struct ask {
    ll L, R, idx;
};
ask q[N];
bool cmp(ask x, ask y) {
    if(x.L / block == y.L / block){return x.R < y.R;}
	else {return x.L < y.L;}
}
ll sum(ll k) {
    ll s = 0;
    while (k >= MINNUM) {
    s += t[k];
    k -= k&-k;
 }
 return s;
}
void add(ll k, ll val) {
 if(k<1) {
     return;
 }
 while (k <= MAXNUM) {
 t[k] += val;
 k += k&-k;
 }
}
bool check(ll t) {
    ll num = sum(MAXNUM) - sum(t-1);
    return num>=t;
}
void del(ll i) {
    add(a[i],-1);
    ll l = 1, r = N;
    while(l + 1 < r) {
        ll mid = l + r >> 1LL;
        if(check(mid)) {
            l = mid;
        }
        else {
            r = mid;
        }
    }
    cur = l;
}
void inc(ll i) {
    add(a[i],1);
    ll l = 1, r = N;
    while(l + 1 < r) {
        ll mid = l + r >> 1LL;
        if(check(mid)) {
            l = mid;
        }
        else {
            r = mid;
        }
    }
    cur = l;
}

int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>n>>qq;
for(ll i = 1; i<=n; i++) {
    cin>>a[i];
    MAXNUM = max(MAXNUM, a[i]);
    MINNUM = min(MINNUM, a[i]);
}
for(ll i = 1; i<=qq; i++) {
    ll l,r;
    cin>>l>>r;
    q[i].L = l;
    q[i].R = r;
    q[i].idx = i;
}
sort(q+1, q+1+qq, cmp);
for(ll i = 1; i<=qq;i++) {
    while(l < q[i].L){
        del(l++);
    }
    while(l > q[i].L){
        inc(--l);
    }
    while(r < q[i].R){
        inc(++r);
    }
    while(r > q[i].R){
        del(r--);
    }
    ans[q[i].idx] = cur;
}
for(ll i = 1; i<=qq; i++) {
    cout<<ans[i]<<"\n";
}
return 0;
}
// equal, min, max, 1, random, build
/*

*/

Compilation message

index.cpp: In function 'void del(long long int)':
index.cpp:53:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   53 |         ll mid = l + r >> 1LL;
      |                  ~~^~~
index.cpp: In function 'void inc(long long int)':
index.cpp:67:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   67 |         ll mid = l + r >> 1LL;
      |                  ~~^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 2548 KB Output is correct
2 Correct 7 ms 2396 KB Output is correct
3 Correct 6 ms 2396 KB Output is correct
4 Correct 6 ms 2568 KB Output is correct
5 Correct 7 ms 2396 KB Output is correct
6 Correct 6 ms 2396 KB Output is correct
7 Correct 7 ms 2396 KB Output is correct
8 Correct 6 ms 2396 KB Output is correct
9 Correct 6 ms 2396 KB Output is correct
10 Correct 7 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 2548 KB Output is correct
2 Correct 7 ms 2396 KB Output is correct
3 Correct 6 ms 2396 KB Output is correct
4 Correct 6 ms 2568 KB Output is correct
5 Correct 7 ms 2396 KB Output is correct
6 Correct 6 ms 2396 KB Output is correct
7 Correct 7 ms 2396 KB Output is correct
8 Correct 6 ms 2396 KB Output is correct
9 Correct 6 ms 2396 KB Output is correct
10 Correct 7 ms 2396 KB Output is correct
11 Correct 1535 ms 5448 KB Output is correct
12 Correct 1616 ms 5276 KB Output is correct
13 Correct 1504 ms 5444 KB Output is correct
14 Correct 1531 ms 5452 KB Output is correct
15 Correct 1554 ms 5492 KB Output is correct
16 Correct 1690 ms 5696 KB Output is correct
17 Correct 1792 ms 5456 KB Output is correct
18 Correct 1733 ms 5444 KB Output is correct
19 Correct 1532 ms 5444 KB Output is correct
20 Correct 1552 ms 5452 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 2548 KB Output is correct
2 Correct 7 ms 2396 KB Output is correct
3 Correct 6 ms 2396 KB Output is correct
4 Correct 6 ms 2568 KB Output is correct
5 Correct 7 ms 2396 KB Output is correct
6 Correct 6 ms 2396 KB Output is correct
7 Correct 7 ms 2396 KB Output is correct
8 Correct 6 ms 2396 KB Output is correct
9 Correct 6 ms 2396 KB Output is correct
10 Correct 7 ms 2396 KB Output is correct
11 Correct 1535 ms 5448 KB Output is correct
12 Correct 1616 ms 5276 KB Output is correct
13 Correct 1504 ms 5444 KB Output is correct
14 Correct 1531 ms 5452 KB Output is correct
15 Correct 1554 ms 5492 KB Output is correct
16 Correct 1690 ms 5696 KB Output is correct
17 Correct 1792 ms 5456 KB Output is correct
18 Correct 1733 ms 5444 KB Output is correct
19 Correct 1532 ms 5444 KB Output is correct
20 Correct 1552 ms 5452 KB Output is correct
21 Execution timed out 2548 ms 9804 KB Time limit exceeded
22 Halted 0 ms 0 KB -