第一周 2.29 --- 3.6

2.29

cf 620 e New Year Tree

dfs序,线段树区间修改,颜色不超过60种

改了好久,还是写得太少

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<iostream>
  4 #include<algorithm>
  5 #include<vector>
  6 using namespace std;
  7
  8 typedef long long LL;
  9 const int maxn = 5e6+5;
 10 int a[maxn],b[maxn],ql,qr,qv;
 11 LL sum[maxn],add[maxn];
 12 int vis[maxn],id[maxn],last[maxn],cnt;
 13 vector<int> g[maxn];
 14 int n,m;
 15
 16 void dfs(int u){
 17     id[u] = ++cnt;
 18     for(int i = 0;i < g[u].size();i++){
 19         int v = g[u][i];
 20         if(id[v]) continue;
 21         dfs(v);
 22     }
 23     last[u] = cnt;
 24 }
 25
 26 void Push_up(int o){
 27     sum[o] = sum[o<<1]|sum[o<<1|1];
 28 }
 29
 30 void Push_down(int o){
 31     if(add[o]){
 32         add[o<<1] = add[o<<1|1] = add[o];
 33         sum[o<<1] = 1LL << (add[o]);
 34         sum[o<<1|1] = 1LL << (add[o]);
 35         add[o] = 0LL;
 36     }
 37 }
 38
 39 void Build(int o,int l,int r){
 40     if(l == r){
 41         sum[o] = 1LL << (b[l]);
 42         return;
 43     }
 44     int mid = (l+r)/2;
 45     Build(o<<1,l,mid);
 46     Build(o<<1|1,mid+1,r);
 47     Push_up(o);
 48 }
 49
 50 void Update(int o,int l,int r){
 51     if(ql <= l && r <= qr){
 52         add[o] = qv*1LL;
 53         sum[o] = 1LL << qv;
 54         return;
 55     }
 56     Push_down(o);
 57     int mid = (l+r)/2;
 58     if(ql <= mid) Update(o<<1,l,mid);
 59     if(qr > mid) Update(o<<1|1,mid+1,r);
 60     Push_up(o);
 61 }
 62
 63 LL Query(int o,int l,int r){
 64     if(ql <= l && r <= qr){
 65         return sum[o];
 66     }
 67     Push_down(o);
 68     LL ans = 0LL;
 69     int mid = (l+r)/2;
 70     if(ql <= mid) ans |= Query(o<<1,l,mid);
 71     if(qr > mid) ans |= Query(o<<1|1,mid+1,r);
 72     return ans;
 73 }
 74
 75 void solve(){
 76     memset(add,0,sizeof(add));
 77     Build(1,1,n);
 78     int cmd,c,v;
 79     for(int i = 1;i <= m;i++){
 80         scanf("%d",&cmd);
 81         if(cmd == 1){
 82             scanf("%d %d",&v,&c);
 83             ql = id[v],qr = last[v],qv = c;
 84          //   printf("ql = %d qr = %d qv = %d\n",ql,qr,qv);
 85             Update(1,1,n);
 86         }
 87         else{
 88             scanf("%d",&v);
 89             LL res = 0LL;
 90             ql = id[v],qr = last[v];
 91             res = Query(1,1,n);
 92          //   printf("i = %d res = %I64d\n",i,res);
 93             int zz = 0;
 94             for(int i = 1;i <= 61;i++){
 95                 if(res & (1LL<<i)) zz++;
 96             }
 97             printf("%d\n",zz);
 98         }
 99     }
100 }
101
102 int main(){
103     while(scanf("%d %d",&n,&m) != EOF){
104         for(int i = 1;i <= n;i++) g[i].clear();
105         for(int i = 1;i <= n;i++) scanf("%d",&a[i]);
106         int u,v;
107         for(int i = 1;i <= n-1;i++){
108             scanf("%d %d",&u,&v);
109             g[u].push_back(v);
110             g[v].push_back(u);
111         }
112         memset(vis,0,sizeof(vis));
113         cnt = 0;
114         dfs(1);
115        // for(int i = 1;i <= n;i++) printf("id[%d] = %d last[%d] = %d\n",i,id[i],i,last[i]);
116        memset(b,0,sizeof(b));
117        for(int i = 1;i <= n;i++) b[id[i]] = a[i];
118        solve();
119     }
120     return 0;
121 }

cf 633d 633D - Fibonacci-ish

好神奇

又wa又t的

再用一个map存下已经枚举过的对

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<map>
 6 using namespace std;
 7
 8 typedef long long LL;
 9 int a[1005],n;
10 map<LL,int> h;
11 map<pair<int,int>,int> hh;
12 LL f[1005];
13 int ans,len;
14
15 void dfs(int d){
16     f[d] = f[d-1]+f[d-2];
17     if(h[f[d]] <= 0){
18         len = d-1;
19         return;
20     }
21     h[f[d]]--;
22     dfs(d+1);
23     h[f[d]]++;
24 }
25
26 void solve(){
27     sort(a+1,a+n+1);
28     ans = 2;
29     hh.clear();
30     for(int i = 1;i <= n;i++){
31         for(int j = 1;j <= n;j++){
32             if(i == j) continue;
33             if(hh[make_pair(a[i],a[j])] != 0) continue;
34             hh[make_pair(a[i],a[j])] = 1;
35             f[1] = 1LL*a[i];f[2] = 1LL*a[j];
36
37             h[f[1]]--;h[f[2]]--;
38             len = 2;
39             dfs(3);
40          //   printf("f[1] = %I64d f[2] = %I64d len = %d\n",f[1],f[2],len);
41             ans = max(ans,len);
42             h[f[1]]++;h[f[2]]++;
43         }
44     }
45     printf("%d\n",ans);
46 }
47
48 int main(){
49     while(scanf("%d",&n) != EOF){
50         h.clear();
51         for(int i = 1;i <=n;i++){
52             scanf("%d",&a[i]);
53             h[1LL*a[i]]++;
54         }
55         solve();
56     }
57     return 0;
58 }

时间: 2024-11-17 09:56:42

第一周 2.29 --- 3.6的相关文章

第一周 8.29 - 9.4

开学了>_< 8.29 Round B APAC Test 2017 B. Sherlock and Watson Gym Secrets 昨天下午做了下 g 家的笔试..真的好菜啊..差好远..好好补下题叭 给出 n,A,B,k ,使得( i^A + j^B) % k == 0 的 i ,j 有多少对(i != j , 1 <= i <= n , 1 <= j <= n) 可以按照 模 k 的余数分类 然后 将 两边的余数 组合起来 cnt[x] * cnt[k-x]

学习Linux第一周所有命令总结

一周总结 开学第一周,总结这周所学知识点 以命令首字母顺序整理 alias 用来设置指令的别名 alias命令的作用只局限于该次登入的操作. 若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件/etc/bashrc中. 或者存放在用户家目录的.bashrc中 用法 alias 新的命令='原命令 -选项/参数' unalias 别名 (删除别名) unalias -a 别名 (删除全部别名) 编辑家目录下配置文件(只在当前用户生效) vim ~/.bashr

结对项目第一周总结

结对项目——四则运算 阶段性总结 一.需求分析(第一周达成): 能够生成n道四则运算题,n可由使用者输入来控制 支持整数 支持分数 生成题目中含有括号 可以判断正误,如果错误会输出正确答案 统计正确率 扩展需求: 生成题目后存入文件 完成题目后从文件读入并进行判断 支持题目去重 支持繁體中文,简体中文,English 二.设计思路(同时输出UML类图): 以下是程序主体设计思路,各步骤具体操作详情请见注释: 由于本周可用的准备时间较长,我们选择直接进行真分数的操作.在java语言中并没有一个专门

20155336 2016-2017-2《JAVA程序设计》第一周学习总结

# 20155336  2016-2017-2<JAVA程序设计>第1周学习总结 ## 教材学习内容总结 开学的第一周,带着些许的欣喜和好奇,听完了老师的第一堂课.说心里话学习JAVA仿佛观看一部英文影视作品一样头疼, 因为总会有许许多多相似的名字让你记得晕头转向.JAVA也是一样,什么JVM啊JRE啊JDK啊 (/(ㄒoㄒ)/~~)  等等一系列 的英文缩写,让人心神意乱~~但总体上对JAVA有了一个初步的了解.通过课上老师的介绍以及课下对JAVA书第一章的浏览, 我简单的了解了JAVA艰辛

20145216 史婧瑶《信息安全系统设计基础》第一周学习总结

20145216 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 Linux基础 1.ls命令 ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略.我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录.其中“-a” 就是选项,改变了显示的内容.如图所示: 2.man命令 man命令可以查看帮助文档,如 man man : 若在shell中输入 man+数字+命令/函数 即可以查到相关的命令和函数:若不加数字,那man命令默认从数字较

第一周例行报告

PSP 内容 类别 预计时长 开始时间 结束时间 中断时间 实际花费时间 第一周作业一 写作 1h 2017-9-7  19:25 2017-9-7  20:18  回复微信消息5min 48min 看<构建之法> 阅读 一周,每天1h30min 2017-9-7  21:35 2017-9-10   每天抽空看一些 没有具体时间 采访记录 写作 1h 2017-9-9   20:46 2017-9-9 22:04  一边写一边吃火龙果  1h左右 构建之法读后感 写作 1h 2017-9-1

《嵌入式设计》第一周学习总结

<嵌入式设计>第一周学习总结 学习时遇到的主要问题 1.运行环境未及时安装 2.命令不熟练 3.上课状态不好 解决方法 1.及时安装环境并熟悉运行 2.参考Linux操作系统实用教程并百度一些问题的解决办法 3.及时调整自己状态 主要学习内容 Linux一些简单基本的操作, 用.c文件输出hello word 用vi test.c 创建.c文件 #include <stdio.h> int main(){ printf("hello word\n"); } 并用

20145311 《信息安全系统设计基础》第一周学习总结

20145311 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 常用的部分命令 CTRL+SHIFT+T:新建标签页,编程时有重要应用: ALT+数字N:终端中切换到第N个标签页,编程时有重要应用: Tab:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab键就可以得到提示或者帮助完成: CTRL+C:中断程序运行 Ctrl+D:键盘输入结束或退出终端 Ctrl+S: 暂定当前程序,暂停后按下任意键恢复运行 Ctrl+A: 将光标移至输入行头,相当于Home键 Ctrl+E

2016-7第一周工作总结

姓名 王奈 时间 第一周工作总结 学习内容 经过了一周的开发与改进,我们的easy工大已经初见成果.这一周,我们完成了:界面的重新设计,数据获取正确性修改,以及吐槽墙功能的实现等等.我的工作就是文档记录,在这过程中,我能够记录我们项目进步的点点滴滴,记录它是如何一步一步走到现在的样子,就像看到了软件的成长过程一样. 除此之外,我还完成了一个嵌入式开发项目的初步实现,学习了嵌入式编程的原则以及优化方法.如同软工所要求的一样,我在嵌入式开发的过程中也使用了文档记录的方法来管理我们的项目进度,这样一来