Advertisement
Guest User

Untitled

a guest
Feb 19th, 2018
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. struct answer
  5. {
  6.     long long good, a,b,c;
  7.     answer():good(0),a(0),b(0),c(0) {};
  8. };
  9. int main()
  10. {
  11.     long long n,q;
  12.     cin >> n >> q;
  13.     vector<long long> v(n);
  14.     for(long long i=0; i<n; i++)
  15.     {
  16.         cin >> v[i];
  17.     }
  18.     vector<pair<pair<long long,long long>,long long> > z(q);
  19.     for(long long i=0; i<q; i++)
  20.     {
  21.         long long l,r;
  22.         cin >> l >> r;
  23.         z[i]= {{l-1,r-1},i};
  24.     }
  25.     sort(z.begin(),z.end());
  26.     set<pair<long long,long long> > cur;
  27.     vector<answer> ans(q);
  28.     long long curl=0, curr=-1;
  29.     for(long long i=0; i<q; i++)
  30.     {
  31.         long long l=z[i].first.first, r=z[i].first.second, num=z[i].second;
  32.         while(curr<r)
  33.         {
  34.             cur.insert({v[curr+1],curr+1});
  35.             curr++;
  36.         }
  37.         while(curl<l)
  38.         {
  39.             cur.erase({v[curl],curl});
  40.             curl++;
  41.         }
  42.         if(curr-curl+1<3)
  43.         {
  44.             continue;
  45.         }
  46.         auto it=cur.begin();
  47.         ++it;
  48.         ++it;
  49.         for(; it!=cur.end(); ++it)
  50.         {
  51.             auto t1=it;
  52.             --t1;
  53.             auto t2=t1;
  54.             --t2;
  55.             if(it->first < t1->first + t2->first)
  56.             {
  57.                 ans[num].good=1;
  58.                 ans[num].a=it->second;
  59.                 ans[num].b=t1->second;
  60.                 ans[num].c=t2->second;
  61.                 break;
  62.             }
  63.         }
  64.     }
  65.     for(long long i=0; i<q; i++)
  66.     {
  67.         if(ans[i].good)
  68.         {
  69.             cout << ans[i].a+1 << " " << ans[i].b+1 << " " << ans[i].c+1 << "\n";
  70.         }
  71.         else
  72.         {
  73.             cout << "-1\n";
  74.         }
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement