又把自己给坑了,,,,这样做下去太没意思了,要么好好干下去,要么趁早走人
A题水
B题,开始想了半天硬是没想出来,然后开始hack之后才写完算法,提交WA。想了半天感觉哪里都是对的,,,,,其实是自己太垃圾,简单的地方都能写错。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define MAX 1100
using namespace std;
int a[MAX][MAX],b[MAX][MAX],s[MAX];
int n,q;
int dfs(int front,int rear){
if(b[front][rear]!=-1)
return b[front][rear];
if(front+1==rear)
return b[front][rear]=(s[front]>s[rear]?1:0);
if(front==rear)
return b[front][rear]=0;
return b[front][rear]=a[front][rear]+dfs(front+1,rear);
}
int main(){
int aa,bb;
while(~scanf("%d %d",&n,&q)&&n){
memset(a,0,sizeof(a));
memset(b,-1,sizeof(b));
for(int i=0;i<n;i++)
scanf("%d",&s[i]);
for(int i=0;i<n;i++){
int temp=0;
for(int j=i+1;j<n;j++){
if(s[i]>s[j]){
temp++;
}
a[i][j]=temp;//硬是把这行写在了括号里面
}
}
for(int i=0;i<q;i++){
scanf("%d %d",&aa,&bb);
printf("%d\n",dfs(aa-1,bb-1));
}
}
return 0;
}