|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题如下:
给定一个初始状态为空的序列,它将按顺序执行Q个操作
操作分为以下三种:
1 将a插入队列的末尾
2:查询队首元素,并将其删除。数据保证此时A非空
3:将队列升序排排序
输入描述:
第一行一个正整数Q(1 < Q < 2 x 10^5,表示操作数接下来Q行,每行表示一个操作
输出描述:
对于每个操作,输出一行一个正整数表示本次询问的答案。
求问大佬如何改进时间复杂度?
- #include <iostream>
- #include <vector>
- #include <algorithm>
- typedef long long ll;
- using namespace std;
- int main() {
- ios::sync_with_stdio(0);
- cin.tie(0);
- vector<ll> queue, dp;
- ll num, cnum = 0;
- ll temp,ans;
- bool bol=0,judge;
- cin >> num;
- for (ll i = 0; i < num; i++) {
- cin >> temp;
- if (temp == 1) {
- cin >> temp;
- queue.push_back(temp);
- }
- else if (temp == 2) {
- dp.push_back(queue.front());
- queue.erase(queue.begin());
- cnum += 1;
- }
- else if (temp == 3&&ans!=3) {
- sort(queue.begin(), queue.end());
- }
- ans = temp;
- }
- for (ll i = 0; i < cnum; i++) {
- cout << dp[i] << '\n';
- }
- return 0;
- }
复制代码 |
|