Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define MAX 1000007
- #define k 20
- using namespace std;
- map<int, int> valores;
- int n;
- int arr[MAX], passou[MAX];
- int table[k][MAX];
- void generate(){
- for(int i = 1; i <= k; i++){
- for(int j = 0; j + (1 << i) <= n; j++){
- table[i][j] = table[i-1][j] + table[i-1][j + (1 << (i-1))];
- }
- }
- }
- long long int resp(int l){
- long long int sum = 0;
- for(int i = k; i >= 0; i--){
- if((1 << i) <= n-l+1){
- sum += table[i][l];
- l += 1 << i;
- }
- }
- return sum;
- }
- int main(){
- scanf("%d", &n);
- for(int i = 0; i < n; i++){
- scanf("%d", &arr[i]);
- //cout << valores[arr[i]] << " ";
- table[0][++valores[arr[i]]]++;
- //cout << valores[arr[i]] << endl;
- }
- generate();
- long long int ans = 0;
- for(int i = 0; i < n; i++) {
- //cout << valores[arr[i]] << " ";
- if(!passou[valores[arr[i]]]) {
- passou[valores[arr[i]]] = true;
- ans += resp(1 + valores[arr[i]]);
- }
- valores[arr[i]]--;
- //cout << ans << endl;
- }
- printf("%lld\n", ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement