1、题目大意:求末尾L个数的最大值,强制在线
2、分析:这个拿线段树可以直接水过,然后我写了一个 维护单调栈, 二分求最大值的短代码,手懒。。。。
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; #define LL long long pair<LL, LL> a[1000000]; LL tot; int main(){ LL M, D; scanf("%lld%lld", &M, &D); LL ans = 0; LL cnt = 0; while(M --){ char str[2]; LL d; scanf("%s%lld", str, &d); if(str[0] == 'A'){ d += ans; d %= D; cnt ++; while(tot >= 1 && a[tot].second < d) tot --; a[++ tot].first = cnt; a[tot].second = d; } else{ d = (cnt - d + 1); LL l = 1, r = tot; while(l < r){ LL mid = (l + r) / 2; if(a[mid].first < d) l = mid + 1; else r = mid; } ans = a[l].second; printf("%lld\n", ans); } } return 0; }