Dylans loves sequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 114 Accepted Submission(s): 59
Problem Description
Dylans is given N
numbers a[1]....a[N]
And there are Q
questions.
Each question is like this (L,R)
his goal is to find the “inversions” from number L
to number R.
more formally,his needs to find the numbers of pair(x,y),
that L≤x,y≤R
and x<y
and a[x]>a[y]
Input
In the first line there is two numbers
N
and Q.
Then in the second line there are N
numbers:a[1]..a[N]
In the next Q
lines,there are two numbers L,R
in each line.
N≤1000,Q≤100000,L≤R,1≤a[i]≤231?1
Output
For each query,print the numbers of "inversions”
Sample Input
3 2 3 2 1 1 2 1 3
Sample Output
1 3 Hint You shouldn‘t print any space in each end of the line in the hack data.
Source
#include<stdio.h> #include<iostream> #include<string.h> #include<math.h> using namespace std; const int N = 1005; #define LL __int64 int n,q,a[N],l,r,dp[N][N]; int main() { while(scanf("%d%d",&n,&q)>0){ for(int i=1; i<=n; i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); for(int k=1; k<n; k++) for(int i=1; i+k<=n; i++){ int j=i+k; dp[i][j]=dp[i][j-1]+dp[i+1][j]-dp[i+1][j-1]; if(a[i]>a[j]) dp[i][j]++; } while(q--){ scanf("%d%d",&l,&r); printf("%d\n",dp[l][r]); } } return 0; }
时间: 2024-10-08 01:28:47