BZOJ1012: [JSOI2008]最大数maxnumber

SB题。。

为了一些东西。。。我彻底堕落了。。。

  1 //{HEADS
  2 #define FILE_IN_OUT
  3 #define debug
  4 #include <cstdio>
  5 #include <cstring>
  6 #include <cstdlib>
  7 #include <cmath>
  8 #include <ctime>
  9 #include <algorithm>
 10 #include <iostream>
 11 #include <fstream>
 12 #include <vector>
 13 #include <stack>
 14 #include <queue>
 15 #include <deque>
 16 #include <map>
 17 #include <set>
 18 #include <bitset>
 19 #include <complex>
 20 #include <string>
 21 #define REP(i, j) for (int i = 1; i <= j; ++i)
 22 #define REPI(i, j, k) for (int i = j; i <= k; ++i)
 23 #define REPD(i, j) for (int i = j; 0 < i; --i)
 24 #define STLR(i, con) for (int i = 0, sz = con.size(); i < sz; ++i)
 25 #define STLRD(i, con) for (int i = con.size() - 1; 0 <= i; --i)
 26 #define CLR(s) memset(s, 0, sizeof s)
 27 #define SET(s, v) memset(s, v, sizeof s)
 28 #define mp make_pair
 29 #define pb push_back
 30 #define PL(k, n) for (int i = 1; i <= n; ++i) { cout << k[i] << ' '; } cout << endl
 31 #define PS(k) STLR(i, k) { cout << k[i] << ' '; } cout << endl
 32 using namespace std;
 33 #ifdef debug
 34 #ifndef ONLINE_JUDGE
 35     const int OUT_PUT_DEBUG_INFO = 1;
 36 #endif
 37 #endif
 38 #ifdef ONLINE_JUDGE
 39     const int OUT_PUT_DEBUG_INFO = 0;
 40 #endif
 41 #define DG if(OUT_PUT_DEBUG_INFO)
 42 void FILE_INIT(string FILE_NAME) {
 43 #ifdef FILE_IN_OUT
 44 #ifndef ONLINE_JUDGE 
 45     freopen((FILE_NAME + ".in").c_str(), "r", stdin);
 46     freopen((FILE_NAME + ".out").c_str(), "w", stdout);
 47 
 48 #endif
 49 #endif
 50 }
 51 typedef long long LL;
 52 typedef double DB;
 53 typedef pair<int, int> i_pair;
 54 const int INF = 0x3f3f3f3f;
 55 //}
 56 
 57 const int maxn = 200000 + 10;
 58 
 59 int m, d;
 60 
 61 struct Things {
 62     int pos, val;
 63     Things() {}
 64     Things(int pos, int val):pos(pos), val(val) {}
 65     void print() {
 66         printf("%d %d
", pos, val);
 67     }
 68 }S[maxn];
 69 int tail = 0;
 70 /*{ 获取字符*/
 71 char gchar() {
 72     char ret = getchar();
 73     for(; ret == '
' || ret == '
' || ret == ' '; ret = getchar());
 74     return ret;
 75 }
 76 /*}*/
 77 
 78 int main() {
 79     FILE_INIT("BZOJ1012");
 80 
 81     scanf("%d%d", &m, &d);
 82     char ope;
 83     int t, rec = 0, cnt = 0;
 84     REP(i, m) {
 85         ope = gchar();
 86         scanf("%d", &t);
 87         if(ope == 'A') {
 88             S[++tail] = Things(++cnt, (rec + t) % d);
 89             DG S[tail].print();
 90             for(; 1 < tail && S[tail - 1].val <= S[tail].val; S[tail - 1] = S[tail], --tail);
 91             DG S[tail].print();
 92         } else {
 93             int l = 1, r = tail;
 94             DG printf("l = %d r = %d
", l, r);
 95             while(l < r) {
 96                 int mid = (l + r) >> 1;
 97                 if(cnt - S[mid].pos + 1 <= t) {
 98                     r = mid;
 99                 } else {
100                     l = mid + 1;
101                 }
102             }
103             rec = S[l].val;
104             printf("%d
", rec);
105         }
106     }
107 
108     return 0;
109 }
View Code
原文地址:https://www.cnblogs.com/hzf-sbit/p/3880543.html