hung_mine

SHOPS

Oct 13th, 2019
528
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. /// from HUNG MINE with love <3
  4. int res = 0, pos, n, fen[1000011];
  5. long long s, a[500001];
  6. vector <long long> v;
  7. int get (int x) {
  8.       int ans = 1e9;
  9.       for (int i = x; i <= v.size () + 1; i += i & -i) {
  10.             if (ans > fen[i]) {
  11.                   ans = fen[i];
  12.             }
  13.       }
  14.       return ans;
  15. }
  16. void update (int x, int pos) {
  17.       for (int i = x; i; i -= i & -i) {
  18.             if (fen[i] > pos) {
  19.                   fen[i] = pos;
  20.             }
  21.       }
  22. }
  23. int val (long long x) {
  24.       return lower_bound (v.begin (), v.end (), x) - v.begin () + 1;
  25. }
  26. int main () {
  27. //      if (fopen ("test.inp", "r")) {
  28. //            freopen ("test.inp", "r", stdin);
  29. //      }
  30.        {
  31.             freopen ("SHOPS.inp", "r", stdin);
  32.             freopen ("SHOPS.out", "w", stdout);
  33.       }
  34.  
  35.       ios_base :: sync_with_stdio (0);
  36.       cin.tie (0);
  37.       cout.tie (0);
  38.       cin >> n >> s;
  39.       v.push_back (s + 0LL);
  40.       a[0] = 0;
  41.       for (int i = 1; i <= n; ++ i) {
  42.             cin >> a[i];
  43.             a[i] += a[i - 1];
  44.             v.push_back (a[i]);
  45.             v.push_back (s + a[i]);
  46.       }
  47.       sort (v.begin (), v.end ());
  48.       v.resize (unique (v.begin (), v.end ()) - v.begin ());
  49.       for (int i = 0; i <= v.size () + 1; ++ i) {
  50.             fen[i] = 1e9;
  51.       }
  52.       update (val (s + 0LL), 0);
  53.       //for (int i = 1; i <= n; ++ i) cerr << a[i] << ":" << val (a[i]) << " ";cerr << "\n";
  54.       for (int i = 1; i <= n; ++ i) {
  55.             int tmp = get (val (a[i]));//cerr << tmp << " ";
  56.             if (i - tmp > res) {
  57.                   res = i - tmp;
  58.                   pos = tmp + 1;
  59.             }
  60.             update (val (a[i] + s), i);
  61.       }
  62.       cout << res << " " << pos;
  63. }
Add Comment
Please, Sign In to add comment