Codeforces Round #366 (Div. 2) C. Thor (模拟)*

题目链接:http://codeforces.com/contest/705/problem/C


题意:

input
4 6
1 2
1 4
1 2
3 3
1 3
1 3
output
1
2
3
0
1
2
以第二个样例为例,第一行n和q,n表示某手机有n个app,q表示下面有q个操作。

操作类型1:app x增加一条未读信息。

操作类型2:一次把app x的未读信息全部读完。

操作类型3:按照操作类型1添加的顺序,按顺序读t条信息,注意这t条信息可能有的已经读过。


问每次操作后剩多少条未读信息。


本来想用线段树搞,但是操作3怎么也想不出来怎么实现。后来发现模拟可以过,感觉这其中的逻辑不太好想,特别是操作2和操作3的关系,错了好几次之后终于过了。


#include <iostream> 
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_N = 300100;
//mes是把所有收到信息按顺序存入
//appms是指第i个app的所有信息数
//appr指第i个app的所有已读信息数
//read指操作3中第i个app读的信息数 
int mes[MAX_N], appm[MAX_N], appr[MAX_N], read[MAX_N];
int main() {
	int n, q, i, j;
	scanf("%d %d", &n, &q);
	//cnt指总信息数,last指操作3上一次读到了哪一条信息
	//p是数组mes的一个指针 
	int cnt = 0, ans = 0, last = 0, p = 0; 
	for(i = 0; i < q; i++) {
		int x, y;
		scanf("%d %d", &x, &y);
		if(x == 1) {
			mes[cnt++] = y;
			appm[y]++;
			ans++;
		}
		else if(x == 2) {
			ans -= appm[y] - appr[y]; //未读的就是全部的的减去已读的 
			appr[y] = appm[y];
		}
		else {
			if(last < y) { //若大于等于则读不到未读信息 
				for(; p < y; p++) {
					read[mes[p]]++;
					if(read[mes[p]] > appr[mes[p]]) { //读到了未读信息 
						ans -= read[mes[p]] - appr[mes[p]];
						appr[mes[p]] = read[mes[p]];
					}
				}
				last = y;//更新last 
			}
		}
		printf("%d\n", ans);
	}
	return 0;
}


Stkcd [股票代码] ShortName [股票简称] Accper [统计截止日期] Typrep [报表类型编码] Indcd [行业代码] Indnme [行业名称] Source [公告来源] F060101B [净利润现金净含量] F060101C [净利润现金净含量TTM] F060201B [营业收入现金含量] F060201C [营业收入现金含量TTM] F060301B [营业收入现金净含量] F060301C [营业收入现金净含量TTM] F060401B [营业利润现金净含量] F060401C [营业利润现金净含量TTM] F060901B [筹资活动债权人现金净流量] F060901C [筹资活动债权人现金净流量TTM] F061001B [筹资活动股东现金净流量] F061001C [筹资活动股东现金净流量TTM] F061201B [折旧摊销] F061201C [折旧摊销TTM] F061301B [公司现金流1] F061302B [公司现金流2] F061301C [公司现金流TTM1] F061302C [公司现金流TTM2] F061401B [股权现金流1] F061402B [股权现金流2] F061401C [股权现金流TTM1] F061402C [股权现金流TTM2] F061501B [公司自由现金流(原有)] F061601B [股权自由现金流(原有)] F061701B [全部现金回收率] F061801B [营运指数] F061901B [资本支出与折旧摊销比] F062001B [现金适合比率] F062101B [现金再投资比率] F062201B [现金满足投资比率] F062301B [股权自由现金流] F062401B [企业自由现金流] Indcd1 [行业代码1] Indnme1 [行业名称1] 季度数据,所有沪深北上市公司的 分别包含excel、dta数据文件格式及其说明,便于不同软件工具对数据的分析应用 数据来源:基于上市公司年报及公告数据整理,或相关证券交易所、各部委、省、市数据 数据范围:基于沪深北证上市公司 A股(主板、中小企业板、创业板、科创板等)数据整理计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值