Kanade's sum
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2011 Accepted Submission(s): 810
Problem Description
Give you an array
A[1..n]
of length
n
.
Let f(l,r,k) be the k-th largest element of A[l..r] .
Specially , f(l,r,k)=0 if r−l+1<k .
Give you k , you need to calculate ∑nl=1∑nr=lf(l,r,k)
There are T test cases.
1≤T≤10
k≤min(n,80)
A[1..n] is a permutation of [1..n]
∑n≤5∗105
Let f(l,r,k) be the k-th largest element of A[l..r] .
Specially , f(l,r,k)=0 if r−l+1<k .
Give you k , you need to calculate ∑nl=1∑nr=lf(l,r,k)
There are T test cases.
1≤T≤10
k≤min(n,80)
A[1..n] is a permutation of [1..n]
∑n≤5∗105
Input
There is only one integer T on first line.
For each test case,there are only two integers n , k on first line,and the second line consists of n integers which means the array A[1..n]
For each test case,there are only two integers n , k on first line,and the second line consists of n integers which means the array A[1..n]
Output
For each test case,output an integer, which means the answer.
Sample Input
1 5 2 1 2 3 4 5
Sample Output
30
Source
Recommend
思路:
由样例发现,n^k%mod=ans。
ac代码:
#include<stdio.h>
#define LL long long
#define Mod 1e9+7
LL N,K,ans;
LL power2(LL a, LL b, LL c) {
LL res = 1;
a %= c;
while (b) {
if (b & 1)
res = (res * a) % c;
a = (a * a) % c;
b >>= 1;
}
return res;
}
int main() {
int cnt=0;
while(~scanf("%lld%lld",&N,&K)) {
printf("Case #%d: %lld\n",++cnt,power2(N,K,Mod));
}
return 0;
}
总结:有想法多试一试,数据大的题目打表看看(上一场多校貌似也有一道找规律的)。