Submission #476480

# Submission time Handle Problem Language Result Execution time Memory
476480 2021-09-27T10:08:09 Z neki Index (COCI21_index) C++14
60 / 110
2500 ms 116076 KB
#include <bits/stdc++.h>
#define ll int
#define loop(i, a, b) for(ll i=a;i<b;++i)
#define pool(i, a, b) for(ll i=a-1;i>=b;--i)
#define fore(i, a) for(auto&& i:a)
#define fi first
#define se second
#define ps(a) push_back(a)
#define pb(a) pop_back(a)
#define eb(...) emplace_back(__VA_ARGS__)
#define sc scanf
#define vc vector
#define lb lower_bound
#define ub upper_bound
#define all(a) a.begin(), a.end()
#define llmax LLONG_MAX/2
#define llmin -LLONG_MAX/2
using namespace std;
#define mn 500100
#define par pair<ll, ll>
#define ld long double
#define mod 1000000007

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    ll n, q;cin >> n >> q;
    
    vc<vc<ll>> tr(2 * n);
    loop(i, 0, n) {ll t;cin >> t;tr[i+n].eb(t);}
    pool(i, n, 1) tr[i].resize(tr[i * 2].size() + tr[i * 2 + 1].size());
    pool(no, n, 1) merge(all(tr[no * 2]), all(tr[no * 2 +1]), tr[no].begin());
    
    /*loop(i, 1, 2 * n){
        cout << i <<": ";
        fore(v, tr[i]) cout << v<<" ";cout << endl;
    }
    cout << endl;*/
    
    vc<vc<ll>> prno(q);
    loop(i, 0, q){
        ll l, r;cin >> l >> r;--l;
        for(l+=n, r+=n;l<r;l>>=1, r>>=1){
            if(l&1) prno[i].ps(l++);
            if(r&1) prno[i].ps(--r);
        }
        //fore(v, prno[i]) cout << v<<" ";cout <<endl;
    }
    
    vc<ll> l(q, 0), r(q, n);
    while(1){
        vc<ll> act;
        loop(i, 0, q) if(l[i]<r[i]) act.ps(i);
        if(act.size()==0) break;
        
        vc<vc<par>> ques(2 * n);
        vc<ll> sum(q, 0);
        fore(i, act){
            ll mid=(l[i]+r[i]+1)/2;
            fore(v, prno[i]) ques[v].eb(mid, i);
        }
        
        loop(i, 1, 2 * n) if(ques[i].size()){
            sort(all(ques[i]), greater<par>());
            loop(j, 0, tr[i].size()) while(ques[i].size() and tr[i][j]>=ques[i].back().fi){
                sum[ques[i].back().se]+=tr[i].size()-j;
                ques[i].pop_back();
            } 
        }
        
        fore(i, act){
            ll mid=(l[i]+r[i]+1)/2;
            if(mid<=sum[i]) l[i]=mid;
            else r[i]=mid-1;
        }
    }
    loop(i, 0, q) cout << l[i] << endl;
}

Compilation message

index.cpp: In function 'int main()':
index.cpp:3:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    3 | #define loop(i, a, b) for(ll i=a;i<b;++i)
......
   65 |             loop(j, 0, tr[i].size()) while(ques[i].size() and tr[i][j]>=ques[i].back().fi){
      |                  ~~~~~~~~~~~~~~~~~~
index.cpp:65:13: note: in expansion of macro 'loop'
   65 |             loop(j, 0, tr[i].size()) while(ques[i].size() and tr[i][j]>=ques[i].back().fi){
      |             ^~~~
# Verdict Execution time Memory Grader output
1 Correct 9 ms 716 KB Output is correct
2 Correct 9 ms 736 KB Output is correct
3 Correct 9 ms 736 KB Output is correct
4 Correct 9 ms 732 KB Output is correct
5 Correct 10 ms 716 KB Output is correct
6 Correct 9 ms 716 KB Output is correct
7 Correct 9 ms 716 KB Output is correct
8 Correct 8 ms 740 KB Output is correct
9 Correct 8 ms 716 KB Output is correct
10 Correct 9 ms 716 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 9 ms 716 KB Output is correct
2 Correct 9 ms 736 KB Output is correct
3 Correct 9 ms 736 KB Output is correct
4 Correct 9 ms 732 KB Output is correct
5 Correct 10 ms 716 KB Output is correct
6 Correct 9 ms 716 KB Output is correct
7 Correct 9 ms 716 KB Output is correct
8 Correct 8 ms 740 KB Output is correct
9 Correct 8 ms 716 KB Output is correct
10 Correct 9 ms 716 KB Output is correct
11 Correct 1159 ms 27120 KB Output is correct
12 Correct 1139 ms 27948 KB Output is correct
13 Correct 1152 ms 27496 KB Output is correct
14 Correct 1136 ms 27976 KB Output is correct
15 Correct 1149 ms 28896 KB Output is correct
16 Correct 1211 ms 27576 KB Output is correct
17 Correct 1173 ms 27204 KB Output is correct
18 Correct 1138 ms 27464 KB Output is correct
19 Correct 1205 ms 27824 KB Output is correct
20 Correct 1166 ms 27132 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 9 ms 716 KB Output is correct
2 Correct 9 ms 736 KB Output is correct
3 Correct 9 ms 736 KB Output is correct
4 Correct 9 ms 732 KB Output is correct
5 Correct 10 ms 716 KB Output is correct
6 Correct 9 ms 716 KB Output is correct
7 Correct 9 ms 716 KB Output is correct
8 Correct 8 ms 740 KB Output is correct
9 Correct 8 ms 716 KB Output is correct
10 Correct 9 ms 716 KB Output is correct
11 Correct 1159 ms 27120 KB Output is correct
12 Correct 1139 ms 27948 KB Output is correct
13 Correct 1152 ms 27496 KB Output is correct
14 Correct 1136 ms 27976 KB Output is correct
15 Correct 1149 ms 28896 KB Output is correct
16 Correct 1211 ms 27576 KB Output is correct
17 Correct 1173 ms 27204 KB Output is correct
18 Correct 1138 ms 27464 KB Output is correct
19 Correct 1205 ms 27824 KB Output is correct
20 Correct 1166 ms 27132 KB Output is correct
21 Execution timed out 2565 ms 116076 KB Time limit exceeded
22 Halted 0 ms 0 KB -