Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define int long long
- #define pii pair<int, int>
- #define x1 x1228
- #define y1 y1228
- #define left left228
- #define right right228
- #define pb push_back
- #define eb emplace_back
- #define mp make_pair
- #define ff first
- #define ss second
- #define matr vector<vector<int> >
- #define all(x) x.begin(), x.end()
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- const int maxn = 3e5 + 7, mod = 1e9 + 7, inf = 1e18, MAXN = 1e6 + 7;
- const double eps = 1e-9;
- mt19937 rnd(time(0));
- int n, m;
- vector<int> kek[maxn];
- int cnt[maxn];
- int get(int id, int l1, int r1) {
- int l = lower_bound(all(kek[id]), l1) - kek[id].begin();
- int r = upper_bound(all(kek[id]), r1) - kek[id].begin() - 1;
- return r - l + 1;
- }
- void solve() {
- cin >> n >> m;
- vector<int> have;
- for (int i = 0; i < n; ++i) {
- cin >> cnt[i];
- cnt[i] -= i;
- have.pb(cnt[i]);
- }
- sort(all(have));
- have.erase(unique(all(have)), have.end());
- for (int i = 0; i < n; ++i) {
- int id = lower_bound(all(have), cnt[i]) - have.begin();
- kek[id].pb(i);
- }
- for (int i = 0; i < m; ++i) {
- int l, r, x; cin >> l >> r >> x, --l, --r;
- int p = x - l;
- int id = lower_bound(all(have), p) - have.begin();
- if (id >= 0 && id < have.size() && have[id] == p) {
- cout << get(id, l, r) << '\n';
- } else {
- cout << "0\n";
- }
- }
- }
- signed main() {
- #ifdef LOCAL
- freopen("TASK.in", "r", stdin);
- freopen("TASK.out", "w", stdout);
- #else
- #endif // LOCAL
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.precision(20);
- cout << fixed;
- int t = 1;
- for (int i = 0; i < t; ++i)
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement