[タイトル]ユーザー設定をプログラミング

クリエイティブコモンズライセンス 著作権:帰属、紙ベースを作成するために他人を許可し、(同じライセンスで元のライセンス契約に基づいて用紙配布する必要がありますクリエイティブコモンズ

制限時間:3秒

スペースの制約:262144K

連続勧告効果を最適化するために、見出しの今日は、毎日大量のデータを保存して処理します。シナリオを考えてみましょう:私たちは自分の時間に応じて、ユーザーを登録し、各ユーザーが別のプリファレンス値を持っている、記事のクラスのために、ラベルに来ている、我々は、一定の期間内に登録されたユーザについて知りたいと思うでしょう(付属のラベルをバッチユーザ)、Kそのような物品の好みの値のためのユーザの数。いくつかの特別な理由であるため、完全にユーザの範囲をカバーしないであろうクエリが別のユーザの間隔(L1無し<= L2 <= R2 <= R1)問い合わせます。

入力説明:
グループ行動の数n個の第2ユーザ行動整数の数を表すnは、i番目のiは物品Qの挙動の特定のタイプの第3のユーザの好みのユーザを表す番号は正の整数クエリを表す:入力ライン(3 + Q)行、三つの整数Lを含有する各列を通る4は、R、kは、すなわち、符号L参照、クエリのセットを表す<= I <= R値kのような物品のためのユーザの嗜好ユーザーの数。データ= 300000 <Nの範囲であり、q <= 300000 kは整数であります

説明出力:
出力:Qの行の合計は、それぞれの行は番号kのユーザ選好値の整数を表します。

実施例1つの入力:
5
1 2 3 3 5
3
1 2 1
2 5 4
3 5 3。

出力例1:
1
0
2

コード

30%

#include<iostream>
using namespace std;

int main()
{
	int n,l,r,k,groupnum; int a[300001];
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>a[i];
	cin>>groupnum;
	while(groupnum--)
	{
			cin>>l>>r>>k;
			int count=0;
			for(int j=l;j<r;j++)
			{
				if(a[j-1]==k)
				count++;
			}
			cout<<count<<endl;
	}
	return 0;
}

悪い答え

#include <bits/stdc++.h>
using namespace std;
 
const int maxn = 300010;
int usr[maxn], n, q;
 
int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &usr[i]);
    scanf("%d", &q);
 
    while (q--) {
        int left, right, k; scanf("%d%d%d", &left, &right, &k);
        int ans = 0;
        for (int i = left-1; i < right; i++) {
            if (usr[i] == k) {
                ans++;
            }
        }
        printf("%d\n", ans);    
    }
 
    return 0;
}

おすすめ

転載: blog.csdn.net/weixin_44611644/article/details/95300067