func_code_string: #include<bits/stdc++.h>   #define maxn 20010   using namespace std;      int n, m, a[maxn];   int lg[maxn], mx[maxn][21], f[maxn][35][21], s[35], t[35];   int mxx(int x,int y){return x+a[x]>y+a[y]?x:y;}   int qry(int x,int y){return mxx(mx[x][lg[y-x+1]],mx[y-(1<<lg[y-x+1])+1][lg[y-x+1]]);}       int main()   {    lg[0]=-1;    scanf( %d%d ,&n,&m);    for(int i=1;i<=n;i++) scanf( %d ,&a[i]),lg[i]=lg[i>>1]+1,mx[i][0]=i;    for(int j=1;j<=14;j++) for(int i=1;i<=n-(1<<j)+1;i++) mx[i][j]=mxx(mx[i][j-1],mx[i+(1<<(j-1))][j-1]);    for(int i=1;i<=n;i++) for(int j=0;j<31;j++) f[i][j][0]=min(n,i+a[i]+j);    for(int j=1;j<15;j++) for(int i=1;i<=n;i++) for(int x=0;x<31;x++) for(int y=0;x+y<31;y++) f[i][x+y][j]=max(f[i][x+y][j],f[qry(i,f[i][x][j-1])][y][j-1]);    while(m--)    {     int l,r,k;     scanf( %d%d%d ,&l,&r,&k);     if(l==r){puts( 0 );continue;}     for(int i=0;i<=k;i++) s[i]=t[i]=l;     int ans=0;     for(int j=14;j>=0;j--)     {      for(int i=0;i<=k;i++) t[i]=s[i];      for(int x=0;x<=k;x++) for(int y=0;x+y<=k;y++) t[x+y]=std::max(t[x+y],f[qry(l,s[x])][y][j]);      bool flg=0;      for(int i=0;i<=k;i++) if(t[i]>=r) flg=1;      if(flg) continue;      ans+=(1<<j);      for(int i=0;i<=k;i++) s[i]=t[i];     }     printf( %d n ,ans+1);    }    return 0;   }