Codeforces 644B Processing Queries【STL】

来源:互联网 发布:php stdclass new 编辑:程序博客网 时间:2024/05/21 22:30

题目链接:Codeforces 644B Processing Queries

题意:给定n个任务,已知每个任务的出现时间、解决它需要的时间。后台最多可以存储b个任务,多的任务就不给于处理。让你输出所有任务完成的时间,不处理的任务输出-1。

思路:我们模拟去维护一个queue就OK了。
AC代码:

#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <algorithm>#include <vector>#include <queue>#include <map>#include <stack>#define PI acos(-1.0)#define CLR(a, b) memset(a, (b), sizeof(a))#define fi first#define se second#define ll o<<1#define rr o<<1|1using namespace std;typedef long long LL;typedef pair<LL, LL> pii;const int MAXN = 2*1e5 + 1;const int pN = 1e6;// <= 10^7const int INF = 0x3f3f3f3f;const int MOD = 1e9 + 7;void getmax(int &a, int b) {a = max(a, b); }void getmin(int &a, int b) {a = min(a, b); }void add(LL &x, LL y) { x += y; x %= MOD; }struct Node {    LL t, d; int id;};Node num[MAXN];LL ans[MAXN];int main(){    int n, b; cin >> n >> b;    queue<Node> Q; LL last = 0;    for(int i = 0; i < n; i++) {        cin >> num[i].t >> num[i].d; num[i].id = i;        if(last <= num[i].t) {            while(!Q.empty()) {                Node p = Q.front(); Q.pop();                last = max(p.t, last) + p.d;                ans[p.id] = last;                if(last > num[i].t) break;            }        }        if(last > num[i].t){            if(Q.size() < b) {                Q.push(num[i]);            }            else {                ans[num[i].id] = -1;            }        }        else {            last = max(last, num[i].t) + num[i].d;            ans[num[i].id] = last;        }        //cout << last << endl;    }    while(!Q.empty()) {        Node p = Q.front(); Q.pop();        last = max(p.t, last) + p.d;        ans[p.id] = last;    }    for(int i = 0; i < n; i++) {        if(i) cout << ' ';        cout << ans[i];    }    cout << endl;    return 0;}
0 0