게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
시간복잡도 질문입니다 ㅠㅠㅠㅠ
게시물ID : programmer_13818짧은주소 복사하기
작성자 : 프로그램시발
추천 : 0
조회수 : 531회
댓글수 : 2개
등록시간 : 2015/10/12 15:24:11
옵션
  • 본인삭제금지
C++를  공부하고있는 고등학생입니다 !
 
시간복잡도에 대해 아직 안배워서 잘모르는데
 
혹시 이코드의 시간복잡도좀 알려주실 수 있을까요 ???
 
가능하시다면 이유도 좀 알려주셨으면 좋겠습니다 !
 
 
#include <iostream>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
using namespace std;
 
const int maxn = 100000+10;
 
long long tree[maxn];
int arr[maxn];
int input[maxn];
long long n,sum;
 
int psum(int pos){
    ++pos;
    if(pos <= 0) return 0;
    long long ret=0;
    
    while(pos>0){
        ret += tree[pos];
        pos &= (pos-1);
    }
    return ret;
}
 
void add(int pos){
    ++pos;
    while(pos < n){
        tree[pos]++;
        pos += (pos&-pos);
    }
}
 
int main(){
  
 int t,t1;
 cin >>t;
 t1=t;
 int array[maxn];
    while(t--){
        memset(tree,0,sizeof(tree));
        memset(arr,0,sizeof(arr));
        memset(input,0,sizeof(input));
        
        sum=0;
        
        cin >> n;
        
        for(int i=0; i<n; i++) cin >> input[i];
        for(int i=0; i<n; i++) {int x; cin >> x; arr[x] = i;}
        
        for(int i=0; i<n; i++)    // 복잡도가  O(n * logn)
        {
            int that = arr[input[i]];
            sum += that - psum(that-1);
            add(that);
         
  }
   array[t]=sum;
      
    }
 for(int i=0;i<t1;i++) {
  printf("%lld\n",array[t1-i-1]);
 
 }
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호