Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define k 16
- #define MAX 100007
- using namespace std;
- int arr[MAX];
- int table[k+1][MAX];
- int lg[MAX];
- void generate(int sz){
- for(int i = 1; i <= k; i++){
- for(int j = 0; j+ (1 << i) <= sz; j++) {
- table[i][j] = max(table[i-1][j], table[i-1][j + (1 << (i-1))]);
- }
- }
- }
- int resp(int x, int y){
- int i = lg[y-x+1];
- return max(table[i][x], table[i][y - (1 << i)+1]);
- }
- int main(){
- int n; scanf("%d", &n);
- for(int i = 0; i < n; i++){
- scanf("%d", &arr[i]);
- table[0][i] = arr[i];
- if(i >= 2) lg[i] = lg[i/2] + 1;
- }
- generate(n);
- int m, x, y; scanf("%d %d %d", &m, &x, &y);
- long long int ans = 0;
- for(int i = 0; i < m; i++){
- //cout << x << " " << y << endl;
- ans += resp(min(x, y) , max(x,y));
- x = (x+7)%(n-1);
- y = (y+11)%n;
- }
- printf("%lld\n", ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement