Submission #476480

#TimeUsernameProblemLanguageResultExecution timeMemory
476480nekiIndex (COCI21_index)C++14
60 / 110
2565 ms116076 KiB
#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 (stderr)

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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...