이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define int long long
using namespace std;
struct Fenwick
{
int N;
vector<int> bit;
Fenwick(int n) : N(n+1), bit(N) {}
void updatePos(int pos, int add)
{
for (pos++; pos < N; pos += pos & -pos)
bit[pos] += add;
}
int queryRange(int r) // < r
{
int ret(0);
for (; r; r -= r & -r)
ret += bit[r];
return ret;
}
int queryRange(int l, int r) // [l,r)
{
return queryRange(r) - queryRange(l);
}
void updateRange(int l, int r, int add) // [l, r)
{
updatePos(l, add);
updatePos(r, -add);
}
int queryPoint(int pos)
{
return queryRange(pos+1);
}
int nbAvant(int val) // nb elements < val
{
if (queryPoint(0) >= val)
return 0;
int deb(1), fin(N-1);
while (deb < fin)
{
int mil = (deb + fin+1) / 2;
if (queryPoint(mil-1) >= val)
fin = mil-1;
else
deb = mil;
}
return deb;
}
int nbDansSeg(int L, int R) // [L, R)
{
return nbAvant(R) - nbAvant(L);
}
};
signed main(void)
{
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int nbArbres, nbRequetes;
cin >> nbArbres >> nbRequetes;
Fenwick fen(nbArbres);
vector<int> hauteurs(nbArbres);
for (auto &v : hauteurs)
cin >> v;
sort(hauteurs.begin(), hauteurs.end());
for (int iArbre(0); iArbre < nbArbres; ++iArbre)
fen.updateRange(iArbre, iArbre+1, hauteurs[iArbre]);
for (int iRequete = 0; iRequete < nbRequetes; ++iRequete)
{
char typeRequete;
cin >> typeRequete;
if (typeRequete == 'C')
{
int L, R;
cin >> L >> R;
cout << fen.nbDansSeg(L, R+1) << '\n';
}
else
{
int nbUpdates, valUpdate;
cin >> nbUpdates >> valUpdate;
int nbPasBon = fen.nbAvant(valUpdate);
if (nbArbres - nbPasBon <= nbUpdates)
fen.updateRange(nbPasBon, nbArbres, 1);
else
{
int lastValUpd = fen.queryPoint(nbPasBon + nbUpdates-1);
int premierLastVal = fen.nbAvant(lastValUpd);
int dernierLastVal = fen.nbAvant(lastValUpd+1)-1;
fen.updateRange(nbPasBon, premierLastVal, 1);
fen.updateRange(dernierLastVal +1-(nbUpdates - (premierLastVal - nbPasBon)), dernierLastVal+1, 1);
}
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |