#include <bits/stdc++.h>
#define int long long
using namespace std;
int aint[8000 * 4 + 5];
int ain2[50000 * 4 + 2][102];
int lazy[50000 * 4 + 2][102];
const int INF = 1e9;
void update(int nod, int st, int dr, int poz, int val)
{
if(st == dr)
{
aint[nod] += val;
return;
}
int mij = (st + dr) / 2;
if(poz <= mij) update(nod * 2, st, mij, poz, val);
else update(nod * 2 + 1, mij + 1, dr, poz, val);
aint[nod] = max(aint[nod * 2], aint[nod * 2 + 1]);
}
void propagate(int nod, int id)
{
ain2[nod * 2][id] += lazy[nod][id];
ain2[nod * 2 + 1][id] += lazy[nod][id];
lazy[nod * 2][id] += lazy[nod][id];
lazy[nod * 2 + 1][id] += lazy[nod][id];
lazy[nod][id] = 0;
}
void update2(int nod, int st, int dr, int le, int ri, int val, int id)
{
if(le > ri)
return;
if(st == le && dr == ri)
{
ain2[nod][id] += val;
lazy[nod][id] += val;
return;
}
propagate(nod, id);
int mij = (st + dr) / 2;
update2(nod * 2, st, mij, le, min(ri, mij), val, id);
update2(nod * 2 + 1, mij + 1, dr, max(le, mij + 1), ri, val, id);
ain2[nod][id] = max(ain2[nod * 2][id], ain2[nod * 2 + 1][id]);
}
vector<int> countScans(vector<int> a, vector<int> x, vector<int> v)
{
int n = a.size();
int q = x.size();
if(n <= 8000 && q <= 8000)
{
int rez = 0;
for(int i = 0; i < n; i++)
for(int j = i - 1; j >= 0; j--)
if(a[j] > a[i])
update(1, 1, n, i + 1, 1);
vector<int> fin;
for(int i = 0; i < q; i++)
{
//cout<<rez<<" zzzz\n";
for(int j = x[i] + 1; j < n; j++)
{
if(a[x[i]] > a[j])
update(1, 1, n, j + 1, -1);
if(v[i] > a[j])
update(1, 1, n, j + 1, 1);
}
for(int j = x[i] - 1; j >= 0; j--)
{
if(a[j] > a[x[i]])
update(1, 1, n, x[i] + 1, -1);
if(a[j] > v[i])
update(1, 1, n, x[i] + 1, 1);
}
a[x[i]] = v[i];
fin.push_back(aint[1]);
}
return fin;
}
else
{
for(int i = 1; i <= 100; i++)
update2(1, 1, n, 1, n, -INF, i);
for(int i = 0; i < n; i++)
{
update2(1, 1, n, i + 1, i + 1, INF, a[i]);
for(int val = a[i] - 1; val >= 1; val--)
{
update2(1, 1, n, i + 2, n, 1, val);
}
}
vector<int> fin;
for(int i = 0; i < q; i++)
{
update2(1, 1, n, x[i] + 1, x[i] + 1, -INF, a[x[i]]);
update2(1, 1, n, x[i] + 1, x[i] + 1, INF, v[i]);
for(int val = a[x[i]] - 1; val >= 1; val--)
{
update2(1, 1, n, x[i] + 2, n, -1, val);
}
for(int val = v[i] - 1; val >= 1; val--)
{
update2(1, 1, n, x[i] + 2, n, 1, val);
}
int rez = 0;
for(int j = 1; j <= 100; j++)
rez = max(rez, ain2[1][j]);
fin.push_back(rez);
}
return fin;
}
}
/*int main()
{
int n;
cin>>n;
vector<int> read;
for(int i = 1; i <= n; i++)
{
int a;
cin>>a;
read.push_back(a);
}
vector<int> q1, q2;
int q;
cin>>q;
for(int i = 1; i <= q; i++)
{
int a, b;
cin>>a>>b;
q1.push_back(a);
q2.push_back(b);
}
vector<int> rez = countScans(read, q1, q2);
for(auto it : rez)
cout<<it<<'\n';
return 0;
}*/
Compilation message
bubblesort2.cpp: In function 'std::vector<long long int> countScans(std::vector<long long int>, std::vector<long long int>, std::vector<long long int>)':
bubblesort2.cpp:60:13: warning: unused variable 'rez' [-Wunused-variable]
60 | int rez = 0;
| ^~~
/usr/bin/ld: /tmp/cciyOQ6U.o: in function `main':
grader.cpp:(.text.startup+0x181): undefined reference to `countScans(std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status