请教各位大佬,是本蒟蒻的思路错了,还是代码改改就好了求条

image
image
WA0

#include<bits/stdc++.h>
using namespace std;
const int MAX_N=1e5+10;
typedef long long ll;
ll n,o;
int ana[1000010]={0};
vector<pair<int,int>> vec;
void msort(vector<pair<int,int>>& v,ll st,ll en){
  if(en-st<=1)return;
  ll len=en-st,mid=(st+en)/2,ans=0;
  msort(v,st,mid);
  msort(v,mid,en);
  ll i=st,j=mid,k=0;
  vector<pair<int,int>> now(en-st);
  while(i<mid&&j<en){
    //cout<<v[i].second<<' '<<v[j].second<<' '<<v[i].first<<' '<<v[j].first<<' '<<i<<' '<<j<<' '<<mid<<endl;
    if(v[i].first>v[j].first){
      //cout<<"I:"<<i<<" V1:"<<v[i].second<<" V2:"<<v[j].second<<endl;
      now[k]=v[j++];
      ana[v[i].second]+=mid-i;
    }else{
      now[k]=v[i++];
    }
    k++;
  }
  for(;i<mid;i++,k++)now[k]=v[i];
  for(;j<en;j++,k++)now[k]=v[j];
  for(i=st,k=0;i<en;i++,k++)v[i]=now[k];
  return;
}
int main(){
  cin>>n;
  for(ll i=0,j;i<n;i++){
    cin>>j;
    vec.push_back({j,i});
  }
  msort(vec,0,n);
  for(int i=0;i<n;i++)cout<<ana[i]<<endl;
  return 0;
}

(帖子已被作者删除)

你这个方法思路是对的但是时间复杂度超时

你这个是O(n^2)的

我给你代码改对了,但是超时

单调栈呢

要用树状数组

树状数组或者线段树处理逆序对