답안 #894384

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
894384 2023-12-28T08:08:27 Z vjudge1 Index (COCI21_index) C++17
0 / 110
2500 ms 2396 KB
#include <bits/stdc++.h>
#define ll int
#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);
}
void inc(ll i) {
    add(a[i],1);
}
ll answer() {
    ll l = 1, r = N;
    while(l + 1 < r) {
        ll mid = l + r >> 1LL;
        if(check(mid)) {
            l = mid;
        }
        else {
            r = mid;
        }
    }
    return 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] = answer();
}
for(ll i = 1; i<=qq; i++) {
    cout<<ans[i]<<"\n";
}
return 0;
}
// equal, min, max, 1, random, build
/*

*/

Compilation message

index.cpp:19:57: warning: overflow in conversion from 'long long int' to 'int' changes value from '9223372036854775807' to '-1' [-Woverflow]
   19 | ll n,qq,a[N],ans[N], t[200000 + 10], MAXNUM=0, MINNUM = LLONG_MAX,cur = 0,l=0,r=0;
      |                                                         ^~~~~~~~~
index.cpp: In function 'int answer()':
index.cpp:58:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   58 |         ll mid = l + r >> 1LL;
      |                  ~~^~~
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2549 ms 2396 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2549 ms 2396 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2549 ms 2396 KB Time limit exceeded
2 Halted 0 ms 0 KB -