一目ツリーカバーツリーああで、私は愚か学ぶためのデータ構造であってもよい......
Moのは、チームの高度な事柄について学ぶことになっています。
そのことの上に私がプレーしていないので、何のコードはありません、理解することは難しいことではありません。
そんなにツリーのバランス、あってもなく、木はまだ非常に良いラインプレイです。
正解3:
ツリーああの会長、実際には、行に変更暴力、それぞれの変更は2つだけに影響するため、ツリー状の配列を追加する必要はありません。
正解4:
ブロック(暴力が、非常に速く実行されています)。
以下は、実際の正のソリューションです。
第一の色キーワードウサギで、第二のキーワードのランキング位置、半ウサギによって一定範囲内の色の数を見つけます。
変更については、2匹のウサギが隣接しているので、ちょうど、その位置を交換するために、2匹のウサギを見つける必要があり、したがって、整然とした弱体化ではないでしょう。
1 #include<algorithm> 2 #include<iostream> 3 #include<utility> 4 #include<cstdio> 5 #include<vector> 6 #define LL long long 7 #define int LL 8 #define MAXN 300010 9 using namespace std; 10 int n,m,b[MAXN]; 11 const int INF=0; 12 pair<int,int> a[MAXN]; 13 inline int read(); 14 signed main() 15 { 16 // freopen("in.txt","r",stdin); 17 18 n=read(),m=read(); 19 for(int i=1;i<=n;i++)a[i].first=read(),a[i].second=i,b[i]=a[i].first;//a[i]=read(); 20 sort(a+1,a+n+1); 21 int op,x,l,r,c; 22 for(int i=1;i<=m;i++) 23 { 24 op=read(); 25 if(op==1) 26 { 27 l=read(),r=read(),c=read(); 28 int len1=(upper_bound(a+1,a+n+1,make_pair(c,r))-a),len2=(lower_bound(a+1,a+n+1,make_pair(c,l))-a); 29 printf("%lld\n",len1-len2); 30 } 31 else 32 { 33 x=read(); 34 if(b[x]==b[x+1])continue; 35 int tem1=lower_bound(a+1,a+n+1,make_pair(b[x],x))-a,tem2=lower_bound(a+1,a+n+1,make_pair(b[x+1],x+1))-a; 36 swap(a[tem1].second,a[tem2].second);swap(b[x],b[x+1]); 37 } 38 } 39 } 40 inline int read() 41 { 42 int s=0,f=1;char a=getchar(); 43 while(a<'0'||a>'9'){if(a=='-')f=-1;a=getchar();} 44 while(a>='0'&&a<='9'){s=s*10+a-'0';a=getchar();} 45 return s*f; 46 }