Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- /// from HUNG MINE with love <3
- int res = 0, pos, n, fen[1000011];
- long long s, a[500001];
- vector <long long> v;
- int get (int x) {
- int ans = 1e9;
- for (int i = x; i <= v.size () + 1; i += i & -i) {
- if (ans > fen[i]) {
- ans = fen[i];
- }
- }
- return ans;
- }
- void update (int x, int pos) {
- for (int i = x; i; i -= i & -i) {
- if (fen[i] > pos) {
- fen[i] = pos;
- }
- }
- }
- int val (long long x) {
- return lower_bound (v.begin (), v.end (), x) - v.begin () + 1;
- }
- int main () {
- // if (fopen ("test.inp", "r")) {
- // freopen ("test.inp", "r", stdin);
- // }
- {
- freopen ("SHOPS.inp", "r", stdin);
- freopen ("SHOPS.out", "w", stdout);
- }
- ios_base :: sync_with_stdio (0);
- cin.tie (0);
- cout.tie (0);
- cin >> n >> s;
- v.push_back (s + 0LL);
- a[0] = 0;
- for (int i = 1; i <= n; ++ i) {
- cin >> a[i];
- a[i] += a[i - 1];
- v.push_back (a[i]);
- v.push_back (s + a[i]);
- }
- sort (v.begin (), v.end ());
- v.resize (unique (v.begin (), v.end ()) - v.begin ());
- for (int i = 0; i <= v.size () + 1; ++ i) {
- fen[i] = 1e9;
- }
- update (val (s + 0LL), 0);
- //for (int i = 1; i <= n; ++ i) cerr << a[i] << ":" << val (a[i]) << " ";cerr << "\n";
- for (int i = 1; i <= n; ++ i) {
- int tmp = get (val (a[i]));//cerr << tmp << " ";
- if (i - tmp > res) {
- res = i - tmp;
- pos = tmp + 1;
- }
- update (val (a[i] + s), i);
- }
- cout << res << " " << pos;
- }
Add Comment
Please, Sign In to add comment