binary search data structures dp greedy sortings *1300

Please click on ads to support us..

Python Code:

from bisect import bisect_left
from sys import stdin
input = stdin.buffer.readline

def func():
	index = [i+1 for i in range(n) if i+1 > a[i]]
	count = sum(bisect_left(index, a[index[i]-1]) for i in range(len(index)))

	print(count)


for _ in range(int(input())):
	n = int(input())
	a = list(map(int, input().split()))
	func()

C++ Code:

#include <bits/stdc++.h>

using namespace std;
#define gogo ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);

const string YES = "YES";
const string NO = "NO";

template <typename T>
class BIT {
	public:
	vector<T> c;
	int n;

	BIT(int _n) : n(_n) {
		c.resize(n);
	}

	void modify(int x, T v) {
	while (x < n) {
		c[x] += v;
		x |= (x + 1);
	}
	}

	T query(int x) {
		T v{};
	while (x >= 0) {
		v += c[x];
		x = (x & (x + 1)) - 1;
	}
		return v;
	}

	T get(int l, int r) {
	return get(r) - get(l - 1);
	}
};
void run() {
	int n;
	cin >> n;
	vector<int> a(n + 1);
	for (int i = 1;i <= n;i ++) 
		cin >> a[i];
	BIT<int> c(n + 1);
	long long ans = 0;
	for (int i = 1;i <= n;i ++) {
		if (a[i] < i) {
			//cout << "zzzz" << c.query(a[i] - 1) << endl;
			if (a[i] - 1> 0) ans += c.query(a[i] - 1);
			c.modify(i, 1);
		}	
	}
	cout << ans << endl;
}

int32_t main() {
	gogo;
    
	int tt;
	cin >> tt;
	while (tt --) 
		run();

    return 0;
}


Comments

Submit
0 Comments
More Questions

1230B - Ania and Minimizing
1201A - Important Exam
676A - Nicholas and Permutation
431A - Black Square
474B - Worms
987B - High School Become Human
1223A - CME
1658B - Marin and Anti-coprime Permutation
14B - Young Photographer
143A - Help Vasilisa the Wise 2
320A - Magic Numbers
1658A - Marin and Photoshoot
514A - Chewbaсca and Number
382A - Ksenia and Pan Scales
734B - Anton and Digits
1080A - Petya and Origami
1642D - Repetitions Decoding
1440A - Buy the String
1658F - Juju and Binary String
478A - Initial Bet
981A - Antipalindrome
365A - Good Number
1204B - Mislove Has Lost an Array
1409D - Decrease the Sum of Digits
1476E - Pattern Matching
1107A - Digits Sequence Dividing
1348A - Phoenix and Balance
1343B - Balanced Array
1186A - Vus the Cossack and a Contest
1494A - ABC String