Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<fstream>
- using namespace std;
- int getParent(int index)
- {
- return index - (index & -index);
- }
- int getNext(int index)
- {
- return index + (index & -index);
- }
- void aggiorna(int binaryIndexedTree[], int val, int index, int n)
- {
- while(index < n)
- {
- binaryIndexedTree[index] += val;
- index = getNext(index);
- }
- }
- int ottienisomma(int binaryIndexedTree[], int index)
- {
- index = index + 1;
- int sum = 0;
- while(index > 0)
- {
- sum += binaryIndexedTree[index];
- index = getParent(index);
- }
- return sum;
- }
- int main()
- {
- ifstream in("input.txt");
- ofstream out("output.txt");
- int A[100000], n;
- in>>n;
- for(int i=0;i<n;i++)
- in>>A[i];
- int fenwick[100000]={0};
- int valorimaggiori[100000]={0};
- int valoriminori[100000]={0};
- for(int i=0;i<n;i++)
- {
- if(A[i]<i+1)
- fenwick[i]=1;
- valorimaggiori[i]=i-ottienisomma(fenwick, i);
- int valoriminimitotali=A[i]-1;
- valoriminori[i]=valoriminimitotali-valorimaggiori[i];
- aggiorna(fenwick, 1, i, n);
- out<<valoriminori[i]+valorimaggiori[i]<<" ";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement