# 131 条题解

• @ 2018-10-30 20:33:19
``````//差点就写了树状数组。。。但其实是有O(n+k)做法的
//题目中说到，主任位置是单调递增的，我们维护上一次查询的结果，之后可以将每次修改操作分为两种情况：
//1.将要修改的点在主任前
//2.将要修改的点在主任后
//对于第一种情况，我们直接在上一次结果上进行操作
//对于第二种情况，我们将修改保存在一个数组中，每次主任的位置变动时，从其上一个位置往后扫
//由于位置单调递增，每个点至多被扫到一次，总复杂度O(n+k)
//代码也很简洁
#include<cstdio>
#include<iostream>
using namespace std;
int sum[500010];
int main()
{
char c;
int n,k,i,j,m,p,now=0,num=0;
scanf("%d%d",&n,&k);
for(i=1;i<=k;i++)
{
scanf(" %c",&c);
if(c=='A')
{
scanf("%d",&m);
for(j=now+1;j<=m;j++)
num+=sum[j];
now=m;
printf("%d\n",num);
}
if(c=='B')
{
scanf("%d%d",&m,&p);
sum[m]+=p;
if(m<=now)
num+=p;
}
if(c=='C')
{
scanf("%d%d",&m,&p);
if(m<=now)
num-=min(p,sum[m]);
sum[m]=max(0,sum[m]-p);
}
}
return 0;
}

``````
• @ 2021-03-17 15:04:39
``````#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <deque>
using namespace std;

namespace dts
{
int N,K;
int rec[1<<19];
#define rec(x) rec[(x)-1]

void main()
{
scanf("%d %d\n",&N,&K);
int pos=0,ans=0;
memset(rec,0,sizeof(rec));
for (int i=1;i<=K;i++)
{
int M,P;
char O;
scanf("%c %d ",&O,&M);
if (O=='A')
{
for (;pos<M;pos++)
ans+=rec(pos+1);
printf("%d\n",ans);
}
else
{
scanf("%d\n",&P);
if (O=='B')
{
rec(M)+=P;
if (pos>=M)
ans+=P;
}
else if (O=='C')
{
rec(M)-=P;
if (pos>=M)
ans-=P;
}
}
}
}
};

int main()
{
dts::main();
}
``````
• @ 2014-03-22 17:01:36

编译成功

测试数据 #0: Accepted, time = 31 ms, mem = 2688 KiB, score = 10
测试数据 #1: Accepted, time = 15 ms, mem = 2688 KiB, score = 10
测试数据 #2: Accepted, time = 15 ms, mem = 2692 KiB, score = 10
测试数据 #3: Accepted, time = 124 ms, mem = 2688 KiB, score = 10
测试数据 #4: Accepted, time = 109 ms, mem = 2692 KiB, score = 10
测试数据 #5: Accepted, time = 156 ms, mem = 2692 KiB, score = 10
测试数据 #6: Accepted, time = 124 ms, mem = 2688 KiB, score = 10
测试数据 #7: Accepted, time = 156 ms, mem = 2692 KiB, score = 10
测试数据 #8: Accepted, time = 124 ms, mem = 2688 KiB, score = 10
测试数据 #9: Accepted, time = 140 ms, mem = 2692 KiB, score = 10
Accepted, time = 994 ms, mem = 2692 KiB, score = 100

• @ 2012-10-24 21:11:58

├ 测试数据 01：答案正确... (0ms, 2536KB)

├ 测试数据 02：答案正确... (0ms, 2536KB)

├ 测试数据 03：答案正确... (0ms, 2536KB)

├ 测试数据 04：答案正确... (0ms, 2536KB)

├ 测试数据 05：答案正确... (0ms, 2536KB)

├ 测试数据 06：答案正确... (0ms, 2536KB)

├ 测试数据 07：答案正确... (0ms, 2536KB)

├ 测试数据 08：答案正确... (0ms, 2536KB)

├ 测试数据 09：答案正确... (0ms, 2536KB)

├ 测试数据 10：答案正确... (0ms, 2536KB)

---|---|---|---|---|---|---|---|-

Accepted / 100 / 0ms / 2536KB

去你妹的输出格式！

write(sum)错了

writeln(sum)错了

write(sum,' ')错了

write(sum,' ')

……

writeln对了！

害我WA了3次！

去你妹的输出格式！

• @ 2012-10-07 16:11:58

同志们，不要信题目，不要信样例。楼下有人说最后不加writeln也过，那是对的。

一开始只write，没过；

在程序最后加了个writeln，没过；

改成write(tot,' ');，过了……

只要在输出时加空格就行了

• @ 2010-07-22 18:36:29

真是Vag 6K才能A啊

1.write(sum,' ')

2.最后+writeln

3.有下车（Ｃ）情况

4.纯模拟

• @ 2009-11-07 14:31:45

各位牢记

输出全在一行

最后writeln!!!!!!

我悲剧了n次

• @ 2009-10-27 18:58:53

编译通过...

├ 测试数据 01：答案正确... 0ms

├ 测试数据 02：答案正确... 0ms

├ 测试数据 03：答案正确... 0ms

├ 测试数据 04：答案正确... 0ms

├ 测试数据 05：答案正确... 0ms

├ 测试数据 06：答案正确... 0ms

├ 测试数据 07：答案正确... 56ms

├ 测试数据 08：答案正确... 0ms

├ 测试数据 09：答案正确... 0ms

├ 测试数据 10：答案正确... 0ms

---|---|---|---|---|---|---|---|-

Accepted 有效得分：100 有效耗时：56ms

• @ 2009-10-27 18:31:40

编译通过...

├ 测试数据 01：答案正确... 0ms

├ 测试数据 02：答案正确... 0ms

├ 测试数据 03：答案正确... 0ms

├ 测试数据 04：答案正确... 0ms

├ 测试数据 05：答案正确... 72ms

├ 测试数据 06：答案正确... 25ms

├ 测试数据 07：答案正确... 25ms

├ 测试数据 08：答案正确... 87ms

├ 测试数据 09：答案正确... 40ms

├ 测试数据 10：答案正确... 72ms

---|---|---|---|---|---|---|---|-

Accepted 有效得分：100 有效耗时：321ms

心破了,呜呜～～～～～～～～

• @ 2009-10-11 11:03:16

交了n次 原来输出时没有空格 郁闷

另外

这是 sunny 的

编译通过...

├ 测试数据 01：答案正确... 0ms

├ 测试数据 02：答案正确... 0ms

├ 测试数据 03：答案正确... 0ms

├ 测试数据 04：答案正确... 72ms

├ 测试数据 05：运行超时|格式错误...

├ 测试数据 06：运行超时|格式错误...

├ 测试数据 07：运行超时|格式错误...

├ 测试数据 08：运行超时|格式错误...

├ 测试数据 09：运行超时|格式错误...

├ 测试数据 10：运行超时|格式错误...

---|---|---|---|---|---|---|---|-

Unaccepted 有效得分：40 有效耗时：72ms

而 同一个程序

puppy 却

编译通过...

├ 测试数据 01：答案正确... 0ms

├ 测试数据 02：答案正确... 0ms

├ 测试数据 03：答案正确... 0ms

├ 测试数据 04：答案正确... 0ms

├ 测试数据 05：答案正确... 0ms

├ 测试数据 06：答案正确... 0ms

├ 测试数据 07：答案正确... 0ms

├ 测试数据 08：答案正确... 0ms

├ 测试数据 09：答案正确... 0ms

├ 测试数据 10：答案正确... 0ms

---|---|---|---|---|---|---|---|-

Accepted 有效得分：100 有效耗时：0ms

汗……

• @ 2009-09-25 21:32:52

不知道怎么就ac了。

此题刷掉我两个百分点。

• @ 2009-09-21 19:38:29

为什么我偏偏交了3次。。。

P.S.

此题甚是猥琐。。并且甚是海洋。。

• @ 2009-09-20 10:46:52

vj老这样就没意思了,数据输出一直出问题.不过没事,大家都多交一次-_-|||

• @ 2009-09-07 16:44:37

郁闷……

看到水题太激动了，居然忘了有下车的情况，白白浪费我一次提交……

• @ 2009-08-26 13:35:26

因为M是递增的，所以每次对于A的询问，把前面求和的值保存下来，不必重复计数，可以秒杀。

• @ 2016-11-03 22:42:53

+1s
好气啊！没考虑到M是递增的这其中必有高论，害我写线段树

• @ 2009-08-25 14:03:14

VIJOS的题太坑人……不是输出有问题就是精度很猥琐……害得我的通过率从最初的67%掉到现在的52%……我真的很无语……

这道题一定要在后面加writeln;！！！

否则有些人30，有些人50，有些人爆0……

编译通过...

├ 测试数据 01：答案正确... 0ms

├ 测试数据 02：答案正确... 0ms

├ 测试数据 03：答案正确... 0ms

├ 测试数据 04：答案正确... 0ms

├ 测试数据 05：答案正确... 0ms

├ 测试数据 06：答案正确... 0ms

├ 测试数据 07：答案正确... 0ms

├ 测试数据 08：答案正确... 0ms

├ 测试数据 09：答案正确... 0ms

├ 测试数据 10：答案正确... 0ms

---|---|---|---|---|---|---|---|-

Accepted 有效得分：100 有效耗时：0ms

• @ 2009-08-14 16:01:09

这个输出方法真的好扭曲，换行多好看啊.......

• @ 2009-08-12 20:27:04

我无语了！数据有问题！

记住write和writeln!

---|---|---|---|---|---|---|---|---|-

编译通过...

├ 测试数据 01：答案正确... 0ms

├ 测试数据 02：答案正确... 0ms

├ 测试数据 03：答案正确... 0ms

├ 测试数据 04：答案正确... 0ms

├ 测试数据 05：答案正确... 0ms

├ 测试数据 06：答案正确... 0ms

├ 测试数据 07：答案正确... 0ms

├ 测试数据 08：答案正确... 0ms

├ 测试数据 09：答案正确... 0ms

├ 测试数据 10：答案正确... 0ms

---|---|---|---|---|---|---|---|-

Accepted 有效得分：100 有效耗时：0ms

• @ 2009-08-10 23:45:44
• -
一开始重新写，30...
拿去年过puppy的程序交，50~70...还以为puppy比去年慢了
看了walala的题解...加了个writeln

结果...0ms

我@#\$%^&

• @ 2009-08-08 09:48:08

var n,m,x,y,b,c,r,l:longint;

s:string;

a:array[1..500000] of longint;

procedure split;

var tmp:string;

begin

delete(s,1,2);

if pos(' ',s)0 then

begin

tmp:=copy(s,1,pos(' ',s)-1);

delete(s,1,pos(' ',s));

end

else

begin

tmp:=copy(s,1,255);

s:='';

end;

val(tmp,x);

if s'' then val(s,y);

end;

begin

r:=0;

l:=1;

fillchar(a,sizeof(a),0);

for b:=1 to m do

begin

case s[1] of

'A':

begin

split;

for c:=l to x do

r:=r+a[c];

l:=x+1;

write(r,' ');

end;

'B':

begin

split;

if x

ID
1320

6

(无)

2166

573

26%

4