Submission #143500

#TimeUsernameProblemLanguageResultExecution timeMemory
143500songcEmployment (JOI16_employment)C++14
100 / 100
589 ms14948 KiB
#include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int,int> pii; int N, Q; int qu[202020], X[202020], Y[202020]; int A[202020]; int T[1505050]; vector<int> comp; int com(int x){return lower_bound(comp.begin(), comp.end(), x)-comp.begin()+1;} void update(int id, int s, int e, int ts, int te, int v){ if (e < ts || te < s) return; if (ts <= s && e <= te){ T[id] += v; return; } int mid = (s+e)/2; update(id*2, s, mid, ts, te, v); update(id*2+1, mid+1, e, ts, te, v); } int query(int id, int s, int e, int t){ if (e < t || t < s) return 0; if (s == e) return T[id]; int mid = (s+e)/2; return query(id*2, s, mid, t) + query(id*2+1, mid+1, e, t) + T[id]; } int main(){ scanf("%d %d", &N, &Q); for (int i=1; i<=N; i++){ scanf("%d", &A[i]); comp.push_back(A[i]); } for (int i=1; i<=Q; i++){ scanf("%d", &qu[i]); scanf("%d", &X[i]); comp.push_back(X[i]); if (qu[i] == 2){ scanf("%d", &Y[i]); comp.push_back(Y[i]); } } sort(comp.begin(), comp.end()); comp.erase(unique(comp.begin(), comp.end()), comp.end()); for (int i=1; i<=N; i++) { A[i] = com(A[i]); update(1, 1, comp.size(), min(A[i], A[i-1])+1, max(A[i], A[i-1]), 1); } update(1, 1, comp.size(), 1, A[N], 1); for (int i=1; i<=Q; i++){ if (qu[i] == 1) printf("%d\n", query(1, 1, comp.size(), com(X[i])) / 2); else { update(1, 1, comp.size(), min(A[X[i]], A[X[i]-1])+1, max(A[X[i]], A[X[i]-1]), -1); update(1, 1, comp.size(), min(A[X[i]], A[X[i]+1])+1, max(A[X[i]], A[X[i]+1]), -1); A[X[i]] = com(Y[i]); update(1, 1, comp.size(), min(A[X[i]], A[X[i]-1])+1, max(A[X[i]], A[X[i]-1]), 1); update(1, 1, comp.size(), min(A[X[i]], A[X[i]+1])+1, max(A[X[i]], A[X[i]+1]), 1); } } return 0; }

Compilation message (stderr)

employment.cpp: In function 'int main()':
employment.cpp:34:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &N, &Q);
  ~~~~~^~~~~~~~~~~~~~~~~
employment.cpp:36:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &A[i]);
   ~~~~~^~~~~~~~~~~~~
employment.cpp:40:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &qu[i]);
   ~~~~~^~~~~~~~~~~~~~
employment.cpp:41:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &X[i]);
   ~~~~~^~~~~~~~~~~~~
employment.cpp:44:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d", &Y[i]);
    ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...