ZZULIOJ 1784 Camellia的难题
2015-11-22 15:55
232 查看
1784: Camellia的难题
Time Limit: 2 Sec Memory Limit:128 MB
Submit: 67 Solved: 14
SubmitStatusWeb
Board
Description
Camellia遇到了一个问题,她无法解决所以来求助豆子,以下是豆子所理解的问题:给定1000万个点,编号1-1000万。每个点都有一个值,初始的时候均为-1,有n个操作,操作有以下五种。1 x 代表将x点更新为i,i为第几次操作。
2 x 代表将x点更新为-1。
3 代表把所有的点变为-1。
4 x 查询x点的值。
5 查询1000万个点里有多少个点不是-1。
亲爱的同学,你能帮助他们解决这个问题么?
Input
首先输入一个t(t<10)代表t组数组,接下来每组数据首先输入一个n(n<100万)代表n次操作,接下来n行每行一种操作。Output
对于4、5操作来言,输出它们的答案。Sample Input
181 201 154 2052 15535Sample Output
1210其中最麻烦的操作是3,在进行3的时候,记录一个时间变量tim,然后如果结点值只要小于tim表示这个点为-1,然后正常进行运算就行了
ac代码:
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #define MAXN 10000001 #define fab(a) (a)>0?(a):(-a) #define INF 0xfffffff #define LL long long using namespace std; int v[MAXN]; int main() { int t,i,n,a,c,tim; scanf("%d",&t); while(t--) { tim=0; int k=10000000; scanf("%d",&n); memset(v,-1,sizeof(v)); for(i=1;i<=n;i++) { scanf("%d",&c); if(c==1) { scanf("%d",&a); //printf("%d\n",v[a]); if(v[a]==-1||v[a]<tim)//这的小于号找了半天 k--; v[a]=i; //printf("%d\n",k); //printf("%d\n",v[a]); } else if(c==2) { scanf("%d",&a); if(v[a]!=-1&&v[a]>tim) { k++; } //printf("%d\n",k); //sum=sum-v[a]-1; } else if(c==3) { k=10000000; tim=i; } else if(c==4) { scanf("%d",&a); if(v[a]<tim) printf("%d\n",-1); else printf("%d\n",v[a]); } else if(c==5) { printf("%d\n",10000000-k); } } } return 0; }
相关文章推荐
- codeforces-510B-Fox And Two Dots【DFS】
- 修改mjextension使用一键归档在iOS9下有一定几率会闪退的bug
- ContentProvider android:exported = “true”
- 谷歌浏览器拦截窗口(以及url解析分别在php和js中)
- 【Eclipse_部署web项目篇】修改eclipse默认指向的WebContent目录作为启动运行加载
- HashMap获取学生信息
- 4-2 多项式求值
- hihocoder1257(构造)(2015北京ACM/ICPC)
- hihocoder1257(构造)(2015北京ACM/ICPC)
- 【BZOJ】3521: [Poi2014]Salad Bar
- SQL函数学习---------STUFF()函数
- bootStrap table实现分页
- 最小m段和问题
- 浏览器HTTP缓存原理分析
- linux搭建基于LNMP的wordpress博客
- ZZULIOJ 1783 简单的求和
- 修改注册表
- 信息安全系统设计基础第十周学习总结
- 角色访问动态生成用户权限菜单树
- 给Libgdx的ShapeRenderer开启抗锯齿