Advertisement
Manioc

demo

Apr 13th, 2018
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.93 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define k 16
  3. #define MAX 100007
  4. using namespace std;
  5.  
  6. int arr[MAX];
  7. int table[k+1][MAX];
  8. int lg[MAX];
  9.  
  10. void generate(int sz){
  11.     for(int i = 1; i <= k; i++){
  12.         for(int j = 0; j+ (1 << i) <= sz; j++) {
  13.             table[i][j] = max(table[i-1][j], table[i-1][j + (1 << (i-1))]);
  14.         }
  15.     }
  16. }
  17.  
  18. int resp(int x, int y){
  19.     int i = lg[y-x+1];
  20.     return max(table[i][x], table[i][y - (1 << i)+1]);
  21. }
  22. int main(){
  23.     int n;  scanf("%d", &n);
  24.     for(int i = 0; i < n; i++){
  25.         scanf("%d", &arr[i]);
  26.         table[0][i] = arr[i];
  27.         if(i >= 2) lg[i] = lg[i/2] + 1;
  28.     }
  29.     generate(n);
  30.  
  31.     int m, x, y; scanf("%d %d %d", &m, &x, &y);
  32.     long long int ans = 0;
  33.     for(int i = 0; i < m; i++){
  34.         //cout << x << " " << y << endl;
  35.         ans += resp(min(x, y) , max(x,y));
  36.         x = (x+7)%(n-1);
  37.         y = (y+11)%n;
  38.     }
  39.     printf("%lld\n", ans);
  40.     return 0;
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement