Submission details
Task:Kyselyt
Sender:jlaire
Submission time:2025-10-18 04:49:18 +0300
Language:C++ (C++17)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED10
#2ACCEPTED20
#3ACCEPTED30
#4ACCEPTED40
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1, 2, 3, 4details
#2ACCEPTED0.01 s1, 2, 3, 4details
#3ACCEPTED0.01 s1, 3, 4details
#4ACCEPTED0.12 s2, 3, 4details
#5ACCEPTED0.13 s2, 3, 4details
#6ACCEPTED0.12 s2, 3, 4details
#7ACCEPTED0.26 s3, 4details
#8ACCEPTED0.26 s4details
#9ACCEPTED0.28 s4details
#10ACCEPTED0.59 s4details
#11ACCEPTED0.18 s3, 4details
#12ACCEPTED0.40 s4details
#13ACCEPTED0.14 s3, 4details
#14ACCEPTED0.30 s4details
#15ACCEPTED0.28 s4details
#16ACCEPTED0.17 s4details

Code

#include <algorithm>
#include <iostream>
#include <map>
#include <utility>
#include <vector>
using namespace std;
using pii = pair<int,int>;
const int N=1<<18;

#define boss first
#define delta second

pii operator+(pii a, pii b) {
    if (a.boss == b.boss) {
        return pii(a.boss, a.delta + b.delta);
    }
    return a.delta >= b.delta ?
           pii(a.boss, a.delta - b.delta) :
           pii(b.boss, b.delta - a.delta);
}

pii T[4*N];

void init(int t=1, int tl=0, int tr=N-1) {
    if (tl>=tr) return;
    int tm = (tl+tr)/2;
    init(2*t, tl, tm);
    init(2*t+1, tm+1, tr);
    T[t] = T[2*t] + T[2*t+1];
}

pii getboss(int t, int ql, int qr, int tl=0, int tr=N-1) {
    if (ql<=tl && qr>=tr) return pii(T[t].boss, T[t].delta);
    if (qr<tl || ql>tr) return pii(0, 0);
    int tm = (tl+tr)/2;
    return getboss(2*t, ql, qr, tl, tm) +
           getboss(2*t+1, ql, qr, tm+1, tr);
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    map<int, vector<int>> occ;
    int n,q; cin>>n>>q;
    for (int i=0; i<n; i++) {
        int x; cin>>x;
        T[N+i] = pii(x,1);
        occ[x].push_back(i);
    }
    for (auto& [_,v] : occ) v.push_back(-1), v.push_back(N);
    for (auto& [_,v] : occ) sort(v.begin(), v.end());
    init();
    for (int a,b; cin>>a>>b;) {
        a--, b--;
        auto [boss,_] = getboss(1,a,b);
        auto L = lower_bound(occ[boss].begin(), occ[boss].end(), a);
        auto R = upper_bound(occ[boss].begin(), occ[boss].end(), b) - 1;
        if (2*(R-L+1)>b-a+1) {
            cout << boss << '\n';
        }
        else {
            cout << "-1\n";
        }
    }
}

Test details

Test 1

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
100 100
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 2

Group: 1, 2, 3, 4

Verdict: ACCEPTED

input
100 100
2 1 2 2 1 2 2 2 1 2 2 1 1 1 1 ...

correct output
2
1
1
2
1
...

user output
2
1
1
2
1
...

Test 3

Group: 1, 3, 4

Verdict: ACCEPTED

input
100 100
5 19 44 88 14 79 50 44 14 99 7...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 4

Group: 2, 3, 4

Verdict: ACCEPTED

input
100000 100000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 5

Group: 2, 3, 4

Verdict: ACCEPTED

input
100000 100000
1 1 1 2 1 2 1 1 2 1 1 1 1 2 2 ...

correct output
1
1
2
1
1
...

user output
1
1
2
1
1
...

Test 6

Group: 2, 3, 4

Verdict: ACCEPTED

input
100000 100000
8 2 6 1 10 4 9 7 8 10 4 2 8 2 ...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 7

Group: 3, 4

Verdict: ACCEPTED

input
100000 100000
141307 493258596 365539511 222...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 8

Group: 4

Verdict: ACCEPTED

input
200000 200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Test 9

Group: 4

Verdict: ACCEPTED

input
200000 200000
1 2 2 2 1 2 2 1 1 1 1 1 1 1 1 ...

correct output
2
2
2
2
2
...

user output
2
2
2
2
2
...

Test 10

Group: 4

Verdict: ACCEPTED

input
200000 200000
286470749 280175209 741317063 ...

correct output
-1
-1
-1
-1
-1
...

user output
-1
-1
-1
-1
-1
...

Test 11

Group: 3, 4

Verdict: ACCEPTED

input
100000 100000
613084013 1000000000 411999902...

correct output
-1
-1
-1
-1
1000000000
...

user output
-1
-1
-1
-1
1000000000
...

Test 12

Group: 4

Verdict: ACCEPTED

input
200000 200000
613084013 1000000000 411999902...

correct output
1000000000
1000000000
-1
1000000000
-1
...

user output
1000000000
1000000000
-1
1000000000
-1
...

Test 13

Group: 3, 4

Verdict: ACCEPTED

input
100000 100000
663307073 663307073 663307073 ...

correct output
329574367
965067805
768744535
691214891
21873594
...

user output
329574367
965067805
768744535
691214891
21873594
...

Test 14

Group: 4

Verdict: ACCEPTED

input
200000 200000
663307073 663307073 663307073 ...

correct output
107596959
249558965
679275202
760593154
725418770
...

user output
107596959
249558965
679275202
760593154
725418770
...

Test 15

Group: 4

Verdict: ACCEPTED

input
200000 200000
663307073 663307073 663307073 ...

correct output
211070558
49212342
651109313
264549124
651109313
...

user output
211070558
49212342
651109313
264549124
651109313
...

Test 16

Group: 4

Verdict: ACCEPTED

input
200000 200000
2 2 2 1 2 1 1 2 2 1 1 1 1 2 1 ...

correct output
1
2
1
1
1
...

user output
1
2
1
1
1
...