第五周训练总结(一)
来源:互联网 发布:淘宝宝贝促销加权重么 编辑:程序博客网 时间:2024/05/01 22:50
第十六题:
题目大意:一个长度为L的区间,最多有T种颜色,并且有O种操作,接下去有o行。一共就两种操作:1、C a b c:表示的是将【a,b】这个区间染成颜色c。 2、P a b :表示的是询问【a,b】这个区间有多少种颜色。
思路:
这个题目做了两天才有了眉目,线段树区间更新,维护一个区间的颜色种类数就行了,由于只有30种颜色,可以考虑位操作,用一个int来表示。
这个题目需要注意的是不能一直更新到最下面,就更新到符合的区间即可,否则会超时。
买票的问题:
题目大意:
给定每个人插队时的位置及他们的号码,然后判断他们最终的位置。
解题思路:
int p[200005];
int v[200005];
int ans[200005];
struct Node
{
int l,r,num;
}tree[1000000];
void Build(int n,int x,int y)
{
tree[n].l = x;
tree[n].r = y;
tree[n].num = (y - x + 1);
int mid = (x + y) / 2;
if(x == y){
return;
}
Build(2*n,x,mid);
Build(2*n+1,mid+1,y);
}
void Modify(int n,int p,int v)
{
int l = tree[n].l;
int r = tree[n].r;
int mid = (l + r) / 2;
if(l == r){
tree[n].num = 0;
ans[l] = v;
return;
}
if(tree[2*n].num >= p)
Modify(2*n,p,v);
else
Modify(2*n+1,p - tree[2*n].num,v);
tree[n].num = tree[2*n].num + tree[2*n+1].num;
}
int main()
{
int n;
int i;
while(scanf("%d",&n) != EOF)
{
Build(1,1,n);
for(i = 0;i < n;i++){
scanf("%d%d",&p[i],&v[i]);
}
for(i = n - 1;i >= 0;i--){
Modify(1,p[i]+1,v[i]);
}
for(i = 1;i < n;i++){
printf("%d ",ans[i]);
}
printf("%d\n",ans[n]);
}
return 0;
}
感觉这周的状态好了一些,没啥乱七八糟的事,能静下心来看题。还是做的很慢,自己还是要抓紧。
- 第五周训练总结(一)
- 第七周训练总结(一)
- 第八周训练总结(一)
- 第九周训练总结(一)
- 第十周训练总结(一)
- 第十二周训练总结(一)
- 第十三周训练总结(一)
- 第十五周训练总结(一)
- 第四周训练总结(一)
- 第十一周训练总结(一)
- 第十四周训练总结(一)
- 多校联合训练第五场总结
- 2017开学训练第五周周中总结
- 2017开学训练第五周周末总结
- 第五周作业(一)
- 第五周作业(一)
- 第五周任务(一)
- 斯坦福机器学习第五周(如何训练神经网络)
- TextView的使用
- 浏览器嗅探
- 字体发光
- App启动背景图,冷启动,Activity全屏,悬浮窗悬浮
- 【LeetCode】直方图最大矩形覆盖(栈)
- 第五周训练总结(一)
- Html5 视频播放
- 在Eclipse里添加JDK源码
- 图案拉长字体发光
- Java api中文在线版
- JAVA设计模式之抽象工厂模式
- attention model
- 日期+序列构建系统唯一序列号(一)
- Partition List